一 . 解封装用到的函数和结构体

  1.av_register_all() : open 一次就调用一次

  2.avformat_network_init() : 网络模块初始化

  3.avformat_open_input(...) : 打开文件并解析文件

  4.avformat_find_stream_info(...) : 去查找没有头文件索引    探测网络流,也没有头文件

  5.av_find_best_stream(...) :  确定正确的流

  6.av_read_frame : 读取AVPacket的数据

  7.AVFormatContext  :  添加封装  解封装 的上下文

   AVStream : 存流的相关信息

   AVPacket  :  FFmpeg解码 编码接受的数据包(从网络来的数据包需要转换成AVPacket包才可以编解码)

   int  av_packet_from_data(AVPacket  *pkt , uint8_t  *data  , int size)

二.avformat_open_input()的参数讲解

  1.AVFormatContext  **ps   封装格式上下文

  2.const char *url  -------->   数据的地址(http rtp 本地)

  3.AVInputFormat *fmt ------->  指定输入封装格式,一般参数为null,自行去探测(一般不使用了,除非频繁打开同一个内容)

  4.AVDictionary  **options ------->  一组key-value的数组

三.AVFormatContext 的结构体分析

  1.AVIOContext  *pb  : 自定义读写格式或者从内存来读

  2.char filename[1024] : 把打开文件的名字保存起来(譬如断开或者重连)

  3.unsigned int  nb_stream  : 数组流总数的个数

  4.AVStream  **streams :  数组 0:视频 1:音频  AVMediaType(这里面有枚举各种流)

  5.int64_t  duration(AV_TIME_BASE)  : 代表一个媒体文件的长度,以AV_TIME_BASE(1000000)为时间基数单位,

  6.int64_t  bit_rate  :

  void avformat_close_input(AVFormatContext  **s) : 关闭封装格式的上下文的输入流

四. avformat_find_stream_info(AVFormatContext *ic , AVDictionary  **options) :  探测获取封装格式的信(获得头部没有索引的文件信息)

  flv(无法获得总时长)   H264  : 没有头部信息

五 . AVStream的参数

  1.AVRational(代表分数的含义) time_base : 时间基数(它是分数形式)  duration * (time_base.num / time_base.den) ------>转换成秒

  2.int64_t(%lld)   duration :  单位为毫秒(以AVFormat->duration那个为准,这个只是作为参考)

  3.int64_t  nb_frames  : 

  4.AVRational  avg_frame_rate

  5.AVCodecParameters  *codecpar  (音视频的参数) ------->替代AVCodecContext  *codec

    1).enum AVMediaType codec_type : 区分编码格式是音频还是视频

    2).enum AVCodecID  codec_id  : 枚举编码格式

    3).uint32_t  codec_tag : 用四个字节来表示各种编码器

    4).int format  : 像素格式或者音频采样格式

    5).int width,int height : 视频的宽高

    6).uint64_t  channel_layout (取默认值), int channel (声道数), int sample_rate , int frame_size

六 . av_find_best_stream  :  获取音视频的索引

  1.int av_find_best_stream(AVFormatContext *ic , enum AVMediaType type , int  wanted_stream_nb , int related_stream , AVCode **  decoder_ret , int flags)

  2.AVFormatContext  : 封装格式的上下文

  3.AVMediaType : 获取流的类型

  4.wanted_stream_nb :  -1

  5.related_stream : ..........(相关流) -1

  6.decoder_ret   :  解码器相关知识目前用不到

  7.flags  :  目前用不到

读取数据的流的信息方法 :

  audioStream  =  av_find_best_stream     --------->获得流的索引

   AVFormatContext->streams[audioStream]->codecpar->channels  --------->stream[索引]->codecpar->后面就是流的信息

七.av_read_frame : 读取音视频的帧数据

  1.AVFormatContext *s  : 处理文件的上下文

  2.AVPacket  *pkt :   return 0 if OK  < 0 on error or end of file

八 . AVPacket 结构体的使用

  1.AVBufferRef  *buf  : 存储引用的技术

  2.int64_t  pts  :  表示显示时间  //pts*(num/den)  num/den-------->时间基数

  3.int64_t  dts   : 表示解码时间  //同上   如果没有B帧,pts和dts一样

  4.uint8_t  *data , int size  : 指的是AVBufferRef里面再分配的空间

  5.AVPacket *av_packet_alloc(void)  : 初始化并创建AVPacket的对象,在堆上申请的空间,必须要释放

  6.AVPacket *av_packet_clone(const  AVPacket  *src) : 创建AVPacket的对象,并用计数--------------->先创建对象(分配空间),然后再引用+1.

  7.int av_packet_ref(AVPacket *dst , const AVPacket *src) :  在AVPacket创建好的前提下,手动引用+1

   int av_packet_unref(const AVPacket *pkt) : 手动引用-1

  8.void av_packet_free(AVPacket  **pkt)  :  清空对象并减引用计数(与6是一对)

  9.void av_init_packet(AVPacket  * pkt) :  默认初始化

  10. int  av_packet_from_data(AVPacket  *pkt , uint8_t  *data  , int size) : 自定义格式或者抓取网络流转化为AVPacket包

九.  av_seek_frame : 拖动进度条

  int  av_seek_frame(AVFormatContext  *s , int stream_index , int64_t timestamp , int flags)

  1.AVFormatContext  :  处理文件上下文

  2.stream_index  :  流的索引  默认是-1  必须用视频的索引

  3.timestamp  :  时间戳 ----->指拖动到什么位置

  4.flags : 表示移动的方法

   (1).AVSEEK_FLAG_BACKWARDN  1  ----------->找到后面最近的关键帧

   (2).AVSEEK_FLAG_BYTE  2

   (3).AVSEEK_FLAG_ANY    4

   (4).AVSEEK_FLAG_FRAME  8  --------------->找到关键帧  

  Logw("stream = %d size = %d pts = %lld dts = %lld flag = %d",pkt->stream_index , pkt->size , pkt->pts
,pkt->dts, pkt->flags);

    

  

  

FFmpeg音视频解封装的更多相关文章

  1. FFmpeg音视频编解码实践总结

    PS:由于目前开发RTSP服务器传输模块时用到了h264文件,所以攻了一段时间去实现h264的视频编解码,借用FFmpeg SDK实现了任意文件格式之间的转换,并实现了流媒体实时播放,目前音视频同步需 ...

  2. FFmpeg音视频同步示例

    原文地址:https://my.oschina.net/u/555002/blog/79324 前面整个的一段时间,我们有了一个几乎无用的电影播放器.当然,它能播放视频,也能播放音频,但是它还不能被称 ...

  3. 转载:ffmpeg 音视频合成分割

    http://blog.csdn.net/jixiuffff/article/details/5709976 当然先安装了 gentoo 下一条命令搞定 emerge  ffmpeg 格式转换 (将f ...

  4. FFmpeg简易播放器的实现-音视频同步

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10284653.html 基于FFmpeg和SDL实现的简易视频播放器,主要分为读取视频文 ...

  5. FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑

    FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...

  6. android音视频点/直播模块开发

      音视频 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那么作为开发一个小白, ...

  7. Android音视频点/直播模块开发实践总结-zz

    随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能.那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及 ...

  8. python+ffmpeg切割视频

    什么是ffmpeg 1.1 简介 FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包 ...

  9. 音视频处理之FFmpeg封装格式20180510

    一.FFMPEG的封装格式转换器(无编解码) 1.封装格式转换 所谓的封装格式转换,就是在AVI,FLV,MKV,MP4这些格式之间转换(对应.avi,.flv,.mkv,.mp4文件). 需要注意的 ...

随机推荐

  1. phpcms如何给已有的模块添加新功能?

    phpcms如何给已有的模块添加新功能? 方法一:直接在模块里的控制器文件中添加功能. 不建议使用此方法,因为一旦phpcms升级,有可能会覆盖模块中的文件, 导致你添加的功能丢失. 方法二:新建一个 ...

  2. Linux下使用openssl生成证书

    利用OpenSSL生成库和命令程序,在生成的命令程序中包括对加/解密算法的测试,openssl程序,ca程序.利用openssl,ca可生成用于C/S模式的证书文件以及CA文件. 参考:http:// ...

  3. pip常用操作指令

    1.安装模块 pip install vitualenv pip install -r requirement.txt 2.查询模块信息 pip show pip 3.显示已经安装的模块 pip li ...

  4. Ubuntu下部分软件的简介及安装

    1.安装linux摄像头应用软件cheese sudo apt-get install cheese 2.Ubuntu Tweak    Ubuntu Tweak是一款专门为Ubuntu(GNOME桌 ...

  5. 小X归来 模拟赛1 解析

    Problem1 单峰 小X 归来后,首先对数列很感兴趣.他想起有1类特殊的数列叫单峰数列. 我们说一个数列 {ai} 是单峰的,当且仅当存在一个位置 k 使得 ai < ai+1(i < ...

  6. CString 作为参数执行都不执行

    static int LoadUsbSDK(CString curpath ) win10系统下 CString 函数加载dll直接跳过 加载dll最好不要带参数

  7. Debian Buster Nginx 布署 Brophp 项目(类 Thinkphp)

    1 材料 debian buster nginx a project that develop base brophp 2 步骤 配置文件 /etc/nginx/sites-available/pis ...

  8. css长度

    在CSS样式表中,长度单位分两种: 相对长度单位,如px, em等绝对长度单位,如pt,mm等 CSS相对长度单位(relative length unit) CSS相对长度单位中的相对二字,表明了其 ...

  9. 【Linux】Memcached安装

    Memcached概念 Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中, ...

  10. SQL之经典SQL语句大全

    经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...