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 音视频解封装相关推荐

  1. FFmpeg 音视频转封装(MP4与FLV互转,流数据转FLV、MP4)

    1.简介 音视频文件转封装操作就是把一种格式转换为另外一种格式,例如从 flv 转到 MP4,或者把流地址数据转换为MP4. 本文主要讲解 流地址数据 转为 flv文件. 2.流程 2.1 在使用FF ...

  2. 音视频解封装:MP4核心Box详解及H264AAC打包方案

    ​问题背景: 上一篇文章<音视频封装:MP4结构概述和分析工具>让大家看了下MP4的主要结构和推荐了一些分析工具,如果你对MP4没有任何了解,还是先看上文,了解MP4的基本结构,其中还有许 ...

  3. 音视频解封装--解封装分离音频AAC文件

    1:简介 如下图所示,解封装就是将Flv.MP4等文件解封装为视频H264或H265压缩数据,音频解封装为AAC压缩数据. 2:ADTS头结构 ADTS的全称是Audio Data Transport ...

  4. 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 ...

  5. 视频教程-FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-C/C++

    FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK 夏曹俊:南京捷帝科技有限公司创始人,南京大学计算机硕士毕业,有15年c++跨平台项目研发的经验,领导开发过大量的c++虚拟 ...

  6. 利用VS2015与FFmpeg实现视频解编码的基本过程

    利用VS2015与FFmpeg实现视频解编码的基本过程 最近接到一个任务,是有关于视频的网络传输的技术应用,因为在传输的过程中用到了视频的编解码技术,所以近期对其进行了一系列学习.现将最近的学习成果即 ...

  7. FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-夏曹俊-专题视频课程...

    FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-3798人已学习 课程介绍         本课程讲解的是基于流行的直播技术 FFMpeg3.3音视频处理框架,和应用广的 ...

  8. 视频教程-FFmpeg音视频开发实战6 iOS/Android/windows/Linux-其他

    FFmpeg音视频开发实战6 iOS/Android/windows/Linux 先后就职于德国BOSCH,iBabyLabs等企业担任架构设计师,主程, 精通嵌入式Linux,iOS,Android ...

  9. FFmpeg音视频倍速控制

    本文除了会讲到通过命令行处理倍速,还会讲到通过FFmpeg api的方式去处理音频倍速和视频倍速,进而合并成支持倍速的音视频发布成rtmp或者存成flv文件. 介绍FFmpeg的filter工具 音视 ...

最新文章

  1. CodeForces 66C Petya and File System (实现)
  2. BCH社区公益广告位计划
  3. python多久能学会爬虫-python一般学多久
  4. idea复制java_IntelliJ IDEA的剪切、复制和粘贴
  5. 潘石屹接连带货 Python,要来抢我们的饭碗?
  6. Mongodb学习总结(1)——常用NoSql数据库比较
  7. 华为 seco pc版下载_狼人之间电脑版下载-狼人之间pc版下载v1.8 官方版
  8. JavaScript学习——JavaScript 条件 语句 switch语句 while语句
  9. 2012年3月份第2周51Aspx源码发布详情
  10. PS选中部分区域调整透明度
  11. python项目报告怎么写_python项目
  12. 【寒假每日一题2022】acw1934. 贝茜放慢脚步【二路归并】
  13. 手机wifi服务器文件途径,查看手机wifi服务器dns地址
  14. uniapp引入字体图标库
  15. 【报告分享】2021全球自由行报告-中国旅游研究院马蜂窝(附下载)
  16. 实战:Gateway API-2022.2.13
  17. 机器学习之为什么要数据预处理?如何预处理数据?
  18. java流式编程(六)Collector接口
  19. PWM输入捕获(只使用一路定时器通道)
  20. 2008之囧言囧语集合

热门文章

  1. Eep8266下调用analogRead 导致ssid不显示一例 ,又踩了一坑
  2. 快手 CEO 宿华:在毛细血管的末梢记录变化的世界
  3. 智能家居助手详细设计与实现
  4. python 矩阵拼接
  5. 兼容 向前兼容 向后兼容
  6. c语言c11与c18区别,ODS与C18柱的区别
  7. MATLAB绘制7种类型维恩图形
  8. HashMap和HashTable的区别?但是如果想线程安全有想效率高?
  9. 第30篇 Android Studio实现五子棋游戏(一)杂记
  10. 摆脱“卖一台赔一台”的魔咒,电动车制造商需要去哪里取取经?...