FFmpeg 音视频解封装
1.简介
解封装:如下图所示,就是将FLV、MKV、MP4等文件解封装为视频H.264或H.265压缩数据,音频MP3或AAC的压缩数据,下图为常用的基本操作。
2.流程
下图是解封装的基本流程图。
2.1 在使用FFmpeg API之前,需要先注册API,然后才能使用API。当然,新版本的库不需要再调用下面的方法。
av_register_all()
2.2 构建AVFormatContext
声明输入的封装结构体,通过输入文件或者流地址作为封装结构的句柄。韩国电视台的流地址rtmp://mobliestream.c3tv.com:554/live/goodtv.sdp。
AVFormatContext* inputFmtCtx = nullptr;const char* inputUrl = "rtmp://mobliestream.c3tv.com:554/live/goodtv.sdp";///打开输入的流,获取数据 beginint ret = avformat_open_input(&inputFmtCtx, inputUrl, NULL, NULL);
2.3 查找音视频流信息,通过下面的接口与AVFormatContext中建立输入文件对应的流信息。
//查找;if (avformat_find_stream_info(inputFmtCtx, NULL) < 0){printf("Couldn't find stream information.\n");return false;}
2.4 读取音视频流,采用av_read_frame来读取数据包,读出来的数据存储在AVPacket中,确定其为音频、视频、字幕数据,最后解码,或者存储。
AVPacket* pkt = NULL;pkt = av_packet_alloc();while (av_read_frame(inputFmtCtx, pkt) >= 0){//获取数据包//.....解码或者存储//重置av_packet_unref(pkt);}
上述代码所示,通过循环调用av_read_frame()读取到pkt包,然后可以进行解码或者存储数据,如果读取的数据结束,则退出循环,开始指向结束操作。
2.5 执行结束后关闭输入文件,释放资源。
//关闭avformat_close_input(&inputFmtCtx);//释放资源av_packet_free(&pkt);
3.源码
int main()
{
//av_register_all();
avformat_network_init();
AVDictionary* options = NULL;
av_dict_set(&options, "buffer_size", "1024000", 0);
av_dict_set(&options, "max_delay", "500000", 0);
av_dict_set(&options, "stimeout", "2000000", 0);
av_dict_set(&options, "rtsp_transport", "tcp", 0);
AVFormatContext* inputFmtCtx = nullptr;
const char* inputUrl = "rtmp://mobliestream.c3tv.com:554/live/goodtv.sdp";
///打开输入的流,获取数据 begin
int ret = avformat_open_input(&inputFmtCtx, inputUrl, NULL, NULL);
if (ret != 0)
{
printf("Couldn't open input stream.\n");
return -1;
}
int vIndex = -1;
int aIndex = -1;
//查找;
if (avformat_find_stream_info(inputFmtCtx, NULL) < 0)
{
printf("Couldn't find stream information.\n");
return false;
}
AVPacket* pkt = NULL;
pkt = av_packet_alloc();
while (av_read_frame(inputFmtCtx, pkt) >= 0)
{
//获取数据包
//.....解码或者存储
//重置
av_packet_unref(pkt);
}
//关闭
avformat_close_input(&inputFmtCtx);
//释放资源
av_packet_free(&pkt);
return 0;
}
FFmpeg 音视频解封装相关推荐
- FFmpeg 音视频转封装(MP4与FLV互转,流数据转FLV、MP4)
1.简介 音视频文件转封装操作就是把一种格式转换为另外一种格式,例如从 flv 转到 MP4,或者把流地址数据转换为MP4. 本文主要讲解 流地址数据 转为 flv文件. 2.流程 2.1 在使用FF ...
- 音视频解封装:MP4核心Box详解及H264AAC打包方案
问题背景: 上一篇文章<音视频封装:MP4结构概述和分析工具>让大家看了下MP4的主要结构和推荐了一些分析工具,如果你对MP4没有任何了解,还是先看上文,了解MP4的基本结构,其中还有许 ...
- 音视频解封装--解封装分离音频AAC文件
1:简介 如下图所示,解封装就是将Flv.MP4等文件解封装为视频H264或H265压缩数据,音频解封装为AAC压缩数据. 2:ADTS头结构 ADTS的全称是Audio Data Transport ...
- Atitit ffmpeg功能表 多媒体处理类库工具 音频视频 1.1.ffmpeg音视频合成 1.2.Atitit 视频音频分离 提取法 1.3.ffmpeg对视频封装和分离 使用ffmpeg对
Atitit ffmpeg功能表 多媒体处理类库工具 音频视频 目录 1.1. ffmpeg音视频合成 1 1.2. Atitit 视频音频分离 提取法 1 1.3. ffmpeg对视频封装和分离 1 ...
- 视频教程-FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-C/C++
FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK 夏曹俊:南京捷帝科技有限公司创始人,南京大学计算机硕士毕业,有15年c++跨平台项目研发的经验,领导开发过大量的c++虚拟 ...
- 利用VS2015与FFmpeg实现视频解编码的基本过程
利用VS2015与FFmpeg实现视频解编码的基本过程 最近接到一个任务,是有关于视频的网络传输的技术应用,因为在传输的过程中用到了视频的编解码技术,所以近期对其进行了一系列学习.现将最近的学习成果即 ...
- FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-夏曹俊-专题视频课程...
FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-3798人已学习 课程介绍 本课程讲解的是基于流行的直播技术 FFMpeg3.3音视频处理框架,和应用广的 ...
- 视频教程-FFmpeg音视频开发实战6 iOS/Android/windows/Linux-其他
FFmpeg音视频开发实战6 iOS/Android/windows/Linux 先后就职于德国BOSCH,iBabyLabs等企业担任架构设计师,主程, 精通嵌入式Linux,iOS,Android ...
- FFmpeg音视频倍速控制
本文除了会讲到通过命令行处理倍速,还会讲到通过FFmpeg api的方式去处理音频倍速和视频倍速,进而合并成支持倍速的音视频发布成rtmp或者存成flv文件. 介绍FFmpeg的filter工具 音视 ...
最新文章
- CodeForces 66C 	Petya and File System (实现)
- BCH社区公益广告位计划
- python多久能学会爬虫-python一般学多久
- idea复制java_IntelliJ IDEA的剪切、复制和粘贴
- 潘石屹接连带货 Python,要来抢我们的饭碗?
- Mongodb学习总结(1)——常用NoSql数据库比较
- 华为 seco pc版下载_狼人之间电脑版下载-狼人之间pc版下载v1.8 官方版
- JavaScript学习——JavaScript 条件 语句 switch语句 while语句
- 2012年3月份第2周51Aspx源码发布详情
- PS选中部分区域调整透明度
- python项目报告怎么写_python项目
- 【寒假每日一题2022】acw1934. 贝茜放慢脚步【二路归并】
- 手机wifi服务器文件途径,查看手机wifi服务器dns地址
- uniapp引入字体图标库
- 【报告分享】2021全球自由行报告-中国旅游研究院马蜂窝(附下载)
- 实战:Gateway API-2022.2.13
- 机器学习之为什么要数据预处理?如何预处理数据?
- java流式编程(六)Collector接口
- PWM输入捕获(只使用一路定时器通道)
- 2008之囧言囧语集合