live555+ffmpeg如何提取关键帧(I帧,P帧,B帧)
开发流媒体播放器的时候,特别是在windows  mobile,symbian(S60)平台开发时,很可能遇到需要自己开发播放器的情况。
S60平台提供了CVideoPlayUtility接口可以实现流媒体播放器,但由于非开源,所以相对于自己开发播放器,很多操作受到限制。
live555主要用于网络流接收,ffmpeg则是对接收到的数据进行编码/解码。I帧,P帧,B帧是视频流中三种分类,其中I帧也就是关键帧
是基础帧,P帧一般根据I帧确定,而B帧需要前面两着的信息。
举例说:

the Input sequence for video encoder
1  2   3   4   5    6   7
I    B   B   P  B   B   I

Let's take 1,2,3.. as PTS for simplification

the out sequence for video encoder ( this equals the decoder sequence)
1  4   2    3   7   5   6
I   P    B   B   I    B   B

播放器LIVE555收到的序列顺序就应该是:

1  4  2  3  7  5  6

经过解码器解码,顺序又回到1 2 3 4 5 6 7这种正常顺序。

所以我们可以根据avcodec_decode_video来判断帧别。
avcodec_decode_video之后的顺序是一定的。严格按照1 2 3 4。。。这样的顺序来。
判断I帧,P,B帧方法:
(1):假如解码成功,则不是I帧就是P帧(根据AVFrame->keyframe判断是否是I帧)。
假如不是I帧,也不是P帧,则只能是B帧(通过pts判断)。
(2):采用AVFrame->pict_type综合pts的办法:
if(FF_I_TYPE==picture->pict_type)
                        {
                                Printlog("<II>");
                        }
                        else if(FF_P_TYPE==picture->pict_type)
                        {
                                Printlog("<PP>");
                        }
                        else if(FF_B_TYPE==picture->pict_type)
                        {
                                Printlog("<BB>");
                        }
                        else if(FF_S_TYPE==picture->pict_type)
                        {
                                Printlog("<SS>");
                        }
                        else
                        {
                                Printlog("<OtherType>");
                        }
正常情况下是不会打印出B帧的,因为解码成功的肯定是I帧或者是P帧.

转自:http://blog.csdn.net/linzhiji/article/details/5393647

转载于:https://www.cnblogs.com/retrieval/p/3623989.html

live555+ffmpeg如何提取关键帧(I帧,P帧,B帧)相关推荐

  1. python视频提取关键帧_如何使用Python提取视频的关键帧?

    在很多场景下,我们不想或者不能处理视频的每一帧图片,这时我们希望能够从视频中提取出一些重要的帧进行处理,这个过程我们称为视频关键帧提取. 关键帧提取算法多种多样,如何实现主要取决于你对于关键帧的定义. ...

  2. FFmpeg批量提取视频的某一帧作为封面

    命令是这样的: ffmpeg -i input.flv -ss 00:00:02 -frames:v 1 out.png 说明: -i input.flv 截取的视频的名字 -ss 00:00:02 ...

  3. 将视频分成一帧一帧python_python ffmpeg任意提取视频帧的方法

    环境准备 1.安装 FFmpeg 音/视频工具 FFmpeg 简易安装文档 2.安装 ffmpeg-python pip3 install ffmpeg-python 3.[可选]安装 opencv- ...

  4. 视频提取关键帧工具类KeyFramesExtractUtils.py,动态支持三种取帧方式,关键参数可配置,代码经过优化处理,效果和性能更好。

    同步上一期视频关键帧提取方法: 视频提取关键帧的三种方式[已调通]_君临天下tjm的博客-CSDN博客_视频关键帧提取关键代码如下:# -*- coding: utf-8 -*-"" ...

  5. python视频提取关键帧_一种视频关键帧提取算法的制作方法

    本发明属于信息安全技术领域,涉及视频内容信息的提取,具体来说,是一种视频关键帧提取算法. 背景技术: 随着Internet的应用和普及,多媒体信息检索系统对社会各领域产生越来越大的影响.传统的信息检索 ...

  6. 视频提取关键帧的三种方式【已调通】

    推荐优化后的视频关键帧提取方法,已经包装成工具类,代码做了优化,性能和效果更好. 视频提取关键帧工具类KeyFramesExtractUtils.py,动态支持三种取帧方式,关键参数可配置,代码经过优 ...

  7. 通过ffmpeg实时读取宇视摄像头的高清帧流数据,并保存4张图片进行4合一照片的生成。

    通过ffmpeg实时读取宇视摄像头的高清帧流数据,并保存4张图片进行4合一照片的生成. FFmpeg视频解码过程 通常来说,FFmpeg的视频解码过程有以下几个步骤: 注册所支持的所有的文件(容器)格 ...

  8. ffmpeg将视频流转化成图片帧,将图片帧转化为视频(基本无损)

    ffmpeg将视频流转化成图片帧,将图片帧转化为视频(基本无损) 其中-r 和-framerate 都是代表帧率(这个属性属于图片的属性,需要放在图片之前) -s 控制输出格式大小 本人在一个视频稳定 ...

  9. shell命令 ffmpeg 批量提取视频的音频文件

    ffmpeg命令提取音频,主要是for循环目录下的文件,判断是否是mp4结尾的文件,然后执行 ffmpeg命令. 下面上命令的代码 #! /bin/bash function rename() {cd ...

最新文章

  1. Swift5.1 语言参考(六) 声明
  2. linux 内存管理中的 rss 和 vsz
  3. DellEMC品牌正式启用50%是上一代的R730对比R74
  4. Knockout js 绑定 radio 时,当绑定整形的时候,绑定不生效
  5. 计算机二级vb考试查分,全国计算机二级考试VB程序设计复习试题
  6. CentOS7 DNS的添加
  7. python学习笔记:第19天 类的约束、异常、MD5和logging
  8. 前端学习(1221):使用过滤器格式化日期
  9. 用 mCustomScrollbar 滚动条插件实现滚动更新添加数据
  10. 使用国产化的TongWeb服务器使用手册
  11. 【layoutit!】基于 bootstrap 实现可视化布局工具
  12. Java+HTML预习笔记_20140610
  13. 关于使用J-Flash直接烧录bin文件的方法
  14. 企业信息化建设中流程梳理的步骤及方法
  15. for in在python中什么意思_python中for in的用法详解
  16. c语言.jpg图片转成数组_jpg图片不仅能转成PDF文档格式,还可以一键合并!
  17. 世界上第一台通用计算机是多少年诞生的,世界上第一台通用计算机ENIAC是( )年诞生的。...
  18. 加拿大曼尼托巴大学计算机专业几年,2020年加拿大曼尼托巴大学毕业时间是几月...
  19. 单片机数码管显示热敏电阻实测温度,
  20. cd src make install make[1]: Entering directory `/home/xuweiliang/redis/r 错误解析

热门文章

  1. VM安装rhel或linux后,声音很响,如何关闭
  2. Adaptive Feature Recombination and Recalibration for Semantic Segmentation: Application to Brain Tum
  3. 前端笔记 | CSS定位
  4. mysql的主要指标_mysql 主要性能指标
  5. python3读文件编码格式_使用不同的编码格式读取文件系统标准在Python3中
  6. android 8.0 iso6,微信8.0.6更新了什么?IOS系统微信8.0.6版本更新详情一览[多图]
  7. php里面get和post请求,php中GET和POST请求发送几种方法总结
  8. 无法支持python程序的编辑运行和调试_解决pycharm的Python console不能调试当前程序的问题...
  9. OpenCV-Python实战(10)——详解 OpenCV 轮廓检测
  10. c语言有n个人围成一圈用指针,c语言编写n个人围成一圈,按1、2、3报数,报到3的人退出,求最后留在圈中的人是最初n个人中的第几个(用指针实现)...