FFmpeg学习——iOS开发(第一个Demo)

1、将lib接入Xcode工程,编译会报错,需要添加以下库:

2、Build Settings,Header Search Paths添加FFmpeg的头文件路径:$(PROJECT_DIR)/XXXX/FFmpeg-iOS/include

3、显示mp3文件的MetaData,代码如下:

#import <libavformat/avformat.h>
    // 结构体指针
    AVFormatContext *avFormatContext = avformat_alloc_context();
    // 资源文件路径
    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp3"];
    NSString *url = [NSURL fileURLWithPath:filepath].absoluteString;
    // 打开媒体(打开后注意关闭)
    if (avformat_open_input(&avFormatContext, url.UTF8String, NULL, NULL) != 0) {
        av_log(NULL, AV_LOG_ERROR, "Couldn't open file");
        return;
    }
    // 打印MetaData信息
    av_dump_format(avFormatContext, 0, url.UTF8String, NO);
    // 关闭媒体
    avformat_close_input(&avFormatContext);
    // 释放AVFormatContext(avformat_close_input中已调用过avformat_free_context,可以不写)
    avformat_free_context(avFormatContext);

打印信息如下:

Input #0, mp3, from 'file:///var/containers/Bundle/Application/1D5B3D8E-718E-4C36-AF63-A12E3C0C6AC1/testFFmpeg.app/test.mp3':
  Metadata:
    encoder         : Lavf55.37.102
  Duration: N/A, bitrate: N/A
    Stream #0:0: Audio: mp3, 0 channels

需要注意的是:

1、从4.0版开始,av_register_all标记为过期,不再需要调用这个方法;

2、avformat_open_input和avformat_close_input要成对,有打开就得有关闭,不然会有内存泄漏;

3、avformat_alloc_context从内存中申请了一个结构体,所以必须释放该内存;

4、avformat_close_input中已调用过avformat_free_context,可以不调用avformat_free_context。

扫描二维码关注公众号,回复: 9351866 查看本文章
发布了120 篇原创文章 · 获赞 30 · 访问量 35万+

猜你喜欢

转载自blog.csdn.net/yjh4866/article/details/88570712