感谢雷霄骅博士的在中文视频编解码的付出,http://blog.csdn.net/leixiaohua1020


最近要搞一些视频推流的事情,要解析H264裸流并且获取opencv格式的Mat数据给算法工程师们跑算法.相关资源一直很难找到,经常都是太旧导致API版本都更新换代了,没办法让新人或者外行[比如我]快速验证代码是否可行.在参考多个博客,前人的代码东拼西凑总算是写出了这个H264解码器.算是尽我一点点的绵薄之力对这个社区进行回馈吧.

项目地址:
https://github.com/hirorogithub/ffmpeg_sample-H264_to_cv-Mat
环境依赖:
ffmpeg 3.3
opencv3.20(其实2.4应该也没啥问题)

文件简单介绍:
- H264Decoder.h H264Decoder.cpp:解码器本体,输入H264帧,(以0001开头),输出cv::Mat(如果遇到sps,pps则解码失败,当然第一次遇到的时候ffmpeg会记录下sps,pps的信息用于后面解码)
- H264Decoder_jni.cpp H264Decoder.java JNI文件以及对应java class 注意我在jni层返回的数组中拼凑了图片的长宽信息进去(2*sizeof(int)),所以获得这个数组时需要做相应的解析.由于这边的需求是java负责转发数据,实际跑cv算法还是在C++,所以有这么一个操作,不需要的可以自行处理掉

一些坑:
ffmpeg自己有个time.h,编译时加入头文件依赖什么的,很容易报错找不到time相关的基本类型,解决方法百度有.

一些完善:
我会考虑制作一点H264裸流的样例数据并且写个简单的调用example以供参考.


时间2017-07-18:已经upload了sample调用以及测试数据帧,没记错的话0号文件是H264裸流的整合文件,一个文件里面有很多帧.1号往后的文件是以0001作为分割的H264单帧文件,帧文件都打包上git了

FFmpeg解码H264裸流并转换成opencv Mat相关推荐

  1. ffmpeg封装h264裸流为mp4文件,视频播放速度特别慢-解决

    计算实际帧率时,需要从mp4的moov box中的mvhd中取得timescale和duration,将两者相除得到文件总时长, 再从stsz box中取得sample总数,即总帧数sample_co ...

  2. ffmpeg封装h264裸流为mp4文件,视频播放速度特别慢

    计算实际帧率时,需要从mp4的moov box中的mvhd中取得timescale和duration,将两者相除得到文件总时长, 再从stsz box中取得sample总数,即总帧数sample_co ...

  3. ffmpeg解码H264缺少帧的解决办法

    最近用ffmpeg解码H264裸码流文件,发现解码总是少几帧.上网查了些资料,解决了. 当使用avcodec_decode_video2时,如果第三个参数的值为1,则表示完成一帧的解码,如果为0,表示 ...

  4. ffmpeg实现将H264裸流封装成.mp4或.avi文件

    ffmpeg学习历程 由于我是移植到arm-linux环境(海思HI3521A),H264裸流直接从海思的编码模块VENC获取. H264数据流序列:    SPS, PPS, SEI, I, P, ...

  5. h264 裸流打包成mp4 注意事项

    需求: Android 端把网络摄像头的一段正在播放的视频流,截取保存成mp4(按录像按钮时开始录像). 实现: ffmpeg + x264 + sdl; h264 裸流 打包成MP4,在网上也有一大 ...

  6. RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78214267 既然已经可以通过 RTSP 获取h264 裸流了.那么通过 F ...

  7. 音视频开发(17)---RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中

    RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中 https://blog.csdn.net/qq_29350001/article/details/7821426 ...

  8. java rtp 分片_RTP 协议解包为 H264 裸流

    RTP 协议解包为 H264裸流 一. 为什么使用 RTP 协议? TCP 传输流媒体数据由于其可靠性,会造成很大的网络延时和卡顿. UDP 传输由于其不可靠性,会导致丢帧,如果是关键帧,则会花屏一个 ...

  9. 编码为H264裸流并写文件一

    为什么说是裸流呢,因为这篇只讲到把视频编码后写入文件,得到的是一个后缀应该为".h264"的文件,只能用PotPlayer等功能强大的播放器才能打开,因为它没有容器信息,需要装在M ...

最新文章

  1. 大学python用什么教材-清华大学出版社-图书详情-《Python大学教程》
  2. java中由类名和方法名字符串实现其调用【反射机制】
  3. 【工具】jira + dingding 任务状态改变发送自定义消息
  4. 操作系统(二十)进程互斥的硬件实现方法
  5. 理解矩阵 的一些评论
  6. 2.项目管理重要性探讨
  7. java jre 1.6 32位_jre1.6官方下载-java jre1.6(虚拟机运行环境)下载官方版(含32位/64位)-当易网...
  8. 【Elasticsearch】Elasticsearch 索引策略
  9. 阿里云-对象存储 OSS > 开发指南 > 基本概念
  10. 高斯公式,斯克托斯公式
  11. 在gfs2中关闭selinux
  12. 迈信EP100伺服迈信 EP100 伺服驱动器源码学习资料
  13. win7允许远程桌面连接这台计算机,教你怎样win7远程桌面连接设置
  14. Ubuntu 搭建Ftp服务器
  15. 答题卡php,答题卡答题注意事项 - 窗外事 - 简单学习网论坛_中高考学习交流论坛_中学生学习论坛 - Powered by phpwind...
  16. C语言实现FTP客户端(已编译,亲试可用~)
  17. 前端自学学习笔记——JavaScript
  18. 块存储、文件存储、对象存储的区别
  19. MOSFET管应用总结
  20. scala获取字符串首字符和尾字符

热门文章

  1. 深入浅出SQL(10)-多张表的数据库设计
  2. Flume(3)flume1.8 Sinks类型介绍
  3. Deep Learning in a Nutshell
  4. 中国1,4-丁烯二醇市场调研与投资预测报告(2021版)
  5. Linphone callState 电话状态的监听状态(二)
  6. suricata mysql_配置suricata
  7. 与AI大神贾扬清、知乎CTO李大海的对话实录
  8. python怎么在官网下载pygame_python怎么安装pygame
  9. 【白手起家创业故事】江水平和小雨的悲喜人生
  10. 虚拟现实在招聘中的应用