FFmpeg IOS 解封装

2024-05-07 00:38
文章标签 ffmpeg ios 封装

本文主要是介绍FFmpeg IOS 解封装,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解封装流程:

Demo

引入头文件:

//核心库-音视频编解码库
#import <libavcodec/avcodec.h>
//封装格式库
#import <libavformat/avformat.h> 

(1)av_register_all() 注册所有的封装格式、加封装格式;也可以在使用之前单个注册。(新版本该方法弃用了)
在我最新使用的4.0.2版本中,已经不需要调用了。
image.png

(2)avformat_network_init() 初始化网络模块,例如用于解封装rtsp数据

(3)avformat_open_input(…) 打开文件并解析 解析出文件格式 音视频流,视频帧索引
使用之前要确保已经注册封装格式,比如说调用了av_register_all()

(4)avformat_find_stream_info(…) 查找文件格式、索引

(5)av_find_best_stream(…) 找对应的音频流 视频流 /( 遍历返回值的streams[]数
组,音频视频字幕扩展信息,根据标志位来确定信息)

(6)封装的上下文 :AVFormatContext (加解分装都用)
AVStream结构体存储音视频流的参数信息
AVPacket解封装玩后的数据包,用av_read_frame(…)读取,里面包含包的 pts dts 视频是否是关键帧 等 (去掉了 00 00 00 01间隔符)

//打开一个视频文件
+ (void)ffmpegOpenFile:(NSString *)filePath{// 1 注册组件
//    av_register_all();// 2 初始化网络 如果需要的话avformat_network_init()// 2 打开封装格式文件//封装格式上下文AVFormatContext *avformat_context = avformat_alloc_context();//文件路径const char *url = [filePath UTF8String];/*• AVFormatContext **ps  传指针的地址• const char *url   文件路径(本地的或者网络的http rtsp 地址会被存在AVFormatContext 结构体的 fileName中)• AVInputFormat *fmt 指定输入的封装格式 一般情况传NULL即可,自行判断即可• AVDictionary **options 一般传NULL*/int avformat_open_input_result = avformat_open_input(&avformat_context, url, NULL, NULL);if (avformat_open_input_result != 0) {NSLog(@"打开文件失败");char *error_info = NULL;av_strerror(avformat_open_input_result, error_info, 1024);return;}NSLog(@"打开文件成功");}

这篇关于FFmpeg IOS 解封装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/965844

相关文章

【百度AI人脸核身+公安验证】IOS示例工程运行

注意:前提百度账号满足企业认证     注意:公安验证接口非免费。需要单独提交工单申请哦     注意:人脸识别应用勾选文字识别的身份证识别     注意:人脸模块客户端创建了应用。并设置了授权标识、包名相关信息 以上注意都满足。请看重要!!!SDK的license 下载IOS保存本地 下载自动配置授权信息的示例工程 并解压 双击运行FacePrint.

iOS 添加好友请求要怎么注册监听

协议:IChatManagerDelegate代理:[[EaseMob sharedInstance].chatManager addDelegate:self delegateQueue:nil];方法: /*! @method @brief 接收到好友请求时的通知 @discussion @param username 发起好友请求的用户username @param messa

iOS 环信UI集成步骤

新建项目, 把环信的依赖库以及SDK导入到项目中, 添加pch文件, 把项目的Other Linker Flags 改成 -ObjC把环信demo的几个文件导入项目: 3rdparty, Category, Custom, Resources, Class ->Chat -> ChatView, 还有它的define文件ChatDemoUIDefine.h在pch文件导入头文件

iOS 判断网络类型

##1.引入Reachability文件夹 在AFNetworking网络请求库中有一个子文件Reachability,这里面有一个类AFNetworkReachabilityManager是用来专门处理网络类型的。 把这个类拷贝到你的工程目录下。 ##2.引入相关的头文件 #import "AFNetworkReachabilityManager.h"#import <CoreTel

如何从iOS Developer 中下载xcode dmg

最新的xcode beta 版本可以直接下载dmg安装包,但是最新的xcode正式版本却只能更新。很多时候需要在多台机器上安装xcode,显然就需要dmg。自从出了xcode ghost 事件之后,又担心第三方的xcode下载会被植入后门,其实苹果开发者官网有dmg的安装包下载,只是隐藏的比深。 点击链接:https://developer.apple.com/downloads/ 这里面不但

iOS UITableView

一、创建UITableView 1.- initWithFrame:style: - (instancetype)initWithFrame:(CGRect)framestyle:(UITableViewStyle)style 二、列表视图的配置 1.style typedef enum {UITableViewStylePlain, //普通类型UITableViewStyleGr

iOS 延迟执行的几种方法

1、performSelector方法 - (void)viewDidLoad {[super viewDidLoad];NSLog(@"当前时间:%@",[NSDate date]);[self performSelector:@selector(delayMenthod) withObject:nil afterDelay:2.0];}- (void)delayMenthod{NSLog(

iOS 学习资源

一、个人博客 1、刚刚在线 2、浅谈iOS开发中方法延迟执行的几种方式 3、MBProgressHUD 4、MJRefresh 5、AFNetworking 6、iOS数据持久化 7、iOS微信支付 二、常用的开发平台地址 1、银联支付开发平台

iOS 数组排序

##1、字母排序 NSArray *arrData = @[@"i",@"b",@"a",@"d",@"e",@"f",@"g",@"h",@"c"];NSArray *sortArray = [arrData sortedArrayUsingSelector:@selector(compare:)];NSLog(@"%@",sortArray); 输出结果: ##2、数字排序

iOS自定义分享 (一)分享组件的接入

前言 在项目开发中,很多时候需要用到分享的功能。对于新手来说,分享是一个比较棘手的问题。并不是因为分享很难做,只是流程较多,第一次接触难免会出错,只要一个步骤错了,就无法继续下去。在这里对于几种常见的分享总结一下。 实现步骤 第一步:登录对应的网站,注册帐号,创建APP应用,获取AppID和AppKey; 第二步:下载对应的SDK,按照官方提供的文档配置工程,添加相应的依赖库; 第三步: