主要是通过av_parser_parse2拿到AVPaket数据,跟av_read_frame类似。
输入必须是只包含视频编码数据“裸流”(例如H.264、HEVC码流文件),而不能是包含封装格式的媒体数据(例如AVI、MKV、MP4)。
av_parser_init():初始化AVCodecParserContext。其参数是codec_id,所以同时只能解析一种
AVCodecParser用于解析输入的数据流并把它们分成一帧一帧的压缩编码数据。比较形象的说法就是把长长的一段连续的数据“切割”成一段段的数据。核心函数是av_parser_parse2():
av_parser_parse2():解析数据获得一个Packet, 从输入的数据流中分离出一帧一帧的压缩编码数据。
  1. /**
  2. * Parse a packet.
  3. *
  4. * @param s             parser context.
  5. * @param avctx         codec context.
  6. * @param poutbuf       set to pointer to parsed buffer or NULL if not yet finished.
  7. * @param poutbuf_size  set to size of parsed buffer or zero if not yet finished.
  8. * @param buf           input buffer.
  9. * @param buf_size      input length, to signal EOF, this should be 0 (so that the last frame can be output).
  10. * @param pts           input presentation timestamp.
  11. * @param dts           input decoding timestamp.
  12. * @param pos           input byte position in stream.
  13. * @return the number of bytes of the input bitstream used.
  14. *
  15. * Example:
  16. * @code
  17. *   while(in_len){
  18. *       len = av_parser_parse2(myparser, AVCodecContext, &data, &size,
  19. *                                        in_data, in_len,
  20. *                                        pts, dts, pos);
  21. *       in_data += len;
  22. *       in_len  -= len;
  23. *
  24. *       if(size)
  25. *          decode_frame(data, size);
  26. *   }
  27. * @endcode
  28. */
  29. int av_parser_parse2(AVCodecParserContext *s,
  30. AVCodecContext *avctx,
  31. uint8_t **poutbuf, int *poutbuf_size,
  32. const uint8_t *buf, int buf_size,
  33. int64_t pts, int64_t dts,
  34. int64_t pos);
其中poutbuf指向解析后输出的压缩编码数据帧,buf指向输入的压缩编码数据。如果函数执行完后输出数据为空(poutbuf_size为0),则代表解析还没有完成,还需要再次调用av_parser_parse2()解析一部分数据才可以得到解析后的数据帧。当函数执行完后输出数据不为空的时候,代表解析完成,可以将poutbuf中的这帧数据取出来做后续处理。
avformat_open_input()会调用avformat_new_stream()创建AVStream
avformat_new_stream()中又会调用avcodec_alloc_context3()创建AVCodecContext
av_read_frame():获取媒体的一帧压缩编码数据。其中调用了av_parser_parse2()。
“纯净”的解码器中,通过avcodec_decode_video2()成功解码第一帧之后,才能获取到宽高等信息
解析出来的数据,可通过下面的方法判断帧类型:
AVCodecParserContext->pict_type  :AV_PICTURE_TYPE_I,AV_PICTURE_TYPE_P
参考:
解码器-纯净版(不包含libavformat)

转载于:https://www.cnblogs.com/elesos/p/6142295.html

FFmpeg纯净版解码 av_parser_parse2相关推荐

  1. 最简单的基于FFmpeg的解码器-纯净版(不包含libavformat)

    ===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...

  2. 最简单的基于FFmpeg的编码器-纯净版(不包含libavformat)

    ===================================================== 最简单的基于FFmpeg的视频编码器文章列表: 最简单的基于FFMPEG的视频编码器(YUV ...

  3. 最简单的基于FFmpeg的AVfilter的例子-纯净版

    ===================================================== 最简单的基于FFmpeg的AVfilter例子系列文章: 最简单的基于FFmpeg的AVfi ...

  4. 完美解码(超强多功能播放器) v20190811官方无广告纯净版

    点击下载来源:完美解码(超强多功能播放器) v20190811官方无广告纯净版 完美解码是专门为爱看影视又嫌于视频解码的用户设计的一款多功能全方位的高清视频解码播放器,拥有着超强的HDTV支持,画质远 ...

  5. 虚拟机安装Win10纯净版操作系统

    虚拟机安装Win10纯净版操作系统 虚拟机安装Win10纯净版操作系统 1. 操作系统资源地址 2. 虚拟机安装步骤 3. 写在后面 虚拟机安装Win10纯净版操作系统 本文讲述在VMware Wor ...

  6. GhostXP SP3 统一会员纯净版 V2.1

    GhostXP SP3 统一会员纯净版 V2.1 2010年06月11日 GhostXP SP3 统一会员纯净版 V2.1 本系统是使用SP3做为原盘,系统补丁打至2010年6月发表日前,系统稳定,系 ...

  7. 真正的GHOXPGHOST纯净版“觉山孤鹤GHOSTXP纯净版”五一奉献

    真正的GHOXPGHOST纯净版"觉山孤鹤GHOSTXP纯净版"五一奉献 描述:一.光盘DOS下启动图 图片: 描述:二.安装效果图 图片: 描述:三.进入桌面 图片: 描述:四. ...

  8. 火星直播纯净版:速度快、免登录、无广告,这个版本绝了!

    很多用惯了火星直播的朋友,都会认为火星直播是最为好用的电视直播之一,但随着加入了会员机制,还有各种广告和购物频道,体验感就有些不如从前了,还是火星直播免广告的那种最初体验好.大家无奈之余,都会想着找些 ...

  9. 一键ghost奥运版_超详细的纯净版windows系统重装示例

    之前说过通过使用大白菜制作启动盘,再去系统之家下载系统.虽然系统能安装,但是有时安装的是ghost版本,安装方便,只要引导后面就是等待自动安装,驱动什么的都不用管.但是有时会带上很多软件,不好清理甚至 ...

最新文章

  1. 为什么建议使用你 LocalDateTime ,而不是 Date?
  2. LINUX CP命令
  3. 北京电子科技学院计算机专业,北京电子科技学院计算机技术怎么样
  4. c# 图片加图片水印、文字水印和图片文字水印
  5. python2.7与3.7脚本转换_python 2.7 - python 3.7 升级记录
  6. 电视剧潜伏的真正结局
  7. python函数内的作用域包括什么_python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?...
  8. 【Python】Python第三方库安装
  9. MySQL DBA亲授MySQL InnoDB事务ACID实现原理
  10. 内核中的UDP socket流程(7)——udp_sendmsg
  11. Java 利用泛型实现折半查找法
  12. phpcms 指定id范围 调用_Dubbogo 源码笔记(二)客户端调用过程
  13. C语言程序设计 第八章字符串
  14. C中得到4号错误(中断),怎么办
  15. 【Three.js】十二、three.js摄像机控件
  16. 如何迅速分析出系统CPU的瓶颈在哪里
  17. html简单旋转木马
  18. 高仿今日头条视频列表功能
  19. 动手学深度学习第一次打卡
  20. 客户体验是什么?如何提升用户体验从而提高产品成单率?必读!

热门文章

  1. 如果你的 HTML 里全是 div,那就要小心了
  2. 高斯主元素消去法c语言,列主元Gauss消去法(C++实现)
  3. java程序实验报告_实验报告一
  4. Android版本Oppo电视,OPPO 智能电视 R1
  5. 水晶报表 mysql_水晶报表CrystalReport2008使用JDBC连接MySQL数据库-详细步骤
  6. linux性能测试工具的记录
  7. windows下C语言多线程编程
  8. workList in DCMTK问题总结
  9. c++的类中,声明一个对象好还是用指针申请一块空间好?
  10. 控制QLineEdit的输入范围