(转)FFMPEG解码H264拼帧简解
http://blog.csdn.net/ikevin/article/details/7649095
H264的I帧通常 0x00 0x00 0x00 0x01 0x67 开始,到下一个帧头开始之前是完整一帧.可放入FFMPEG的AVPacket中处理
无论是文件流还是网络流,思路是将接收到的数据放入缓冲区,同时开启一个待拼帧的缓冲区1024*1024大小(我的是高清1920*1080,足够)
一、寻I帧头
//判断H264的I帧数据。返回I帧在本缓冲位置,或-1未找到
int _find_head(unsigned char *buffer, int len)
{
int i;
BOOL isMatch=FALSE;
for (i=0;i<len;i++){
if (buffer[i] == 0 && buffer[i+1] == 0 && buffer[i+2] == 0 && buffer[i+3] == 1 && buffer[i+4]==0x67){
isMatch=TRUE;
break;
}
}
return isMatch?i:-1;
}
二、拼帧
//应在循环代码中完成:while 或 for
header_position = _find_head(data,data_len);
//如果在当前解出的H264中找到头
if(header_position>-1){
//如果头在解出数据的首部0索引处
if(header_position==0){
//如果之前已经有上一完整的FRAME缓存
if(total>0){
//printf("%s\ Frame size:%d\n","Frame has got.",total);//提交FRAME
//写H264
//written = fwrite( frameData, total, 1, p810 );
//或解264为YUV数据
//这是FFMPEG的方法,具体看FFMPEG:len = avcodec_decode_video(c, picture, &got_picture, data,data_len);
memset(frameData,0,FF_INPUT_BUFFER_PADDING_SIZE);//清空上一帧FRAME缓存
total=0;
}
//新读入数据放入缓冲区,data是读入数据缓冲区,frameData是将要拼成一帧的缓冲区
memcpy(frameData,data+header_position,data_len-header_position);
total+=data_len;
}else{
//如果头不在解出数据的首部,表示data含有上一帧和下一帧的数据,要进行截取
memcpy(frameData+total,data,header_position);
total+=header_position;
//printf("%s\n","Frame has got.");//提交上一帧FRAME
//写H264
//written = fwrite( frameData, total, 1, p810 );
//或解264为YUV数据
//这是FFMPEG的方法,具体看FFMPEG:len = avcodec_decode_video(c, picture, &got_picture, data,data_len);
memset(frameData,0,FF_INPUT_BUFFER_PADDING_SIZE);//清空上一帧FRAME缓存
total=0;
//同时将截取的下一帧数据放入frameData
memcpy(frameData,data+header_position,data_len-header_position);
total+=data_len-header_position;
}
}else{//最后一个数据包,因为没有I帧数据,要如何处理看大家自己了。
memcpy(frameData+total,data,data_len);
total+=data_len;
}
以上。
(转)FFMPEG解码H264拼帧简解的更多相关文章
- 使用X264编码yuv格式的视频帧使用ffmpeg解码h264视频帧
前面一篇博客介绍在centos上搭建点击打开链接ffmpeg及x264开发环境.以下就来问个样例: 1.利用x264库将YUV格式视频文件编码为h264格式视频文件 2.利用ffmpeh库将h264格 ...
- FFmpeg解码H264及swscale缩放详解
本文概要: 本文介绍著名开源音视频编解码库ffmpeg如何解码h264码流,比较详细阐述了其h264码流输入过程,解码原理,解码过程.同时,大部分应用环境下,以原始码流视频大小展示并不是最佳方式,因此 ...
- 【图像处理】FFmpeg解码H264及swscale缩放详解
http://blog.csdn.net/gubenpeiyuan/article/details/19548019 主题 FFmpeg 本文概要: 本文介绍著名开源音视频编解码库ffmpeg如何 ...
- 在iOS平台使用ffmpeg解码h264视频流(转)
在iOS平台使用ffmpeg解码h264视频流,有需要的朋友可以参考下. 对于视频文件和rtsp之类的主流视频传输协议,ffmpeg提供avformat_open_input接口,直接将文件路径或UR ...
- 在iOS平台使用ffmpeg解码h264视频流
来源:http://www.aichengxu.com/view/37145 在iOS平台使用ffmpeg解码h264视频流,有需要的朋友可以参考下. 对于视频文件和rtsp之类的主流视频传输协议,f ...
- FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(四):ffmpeg解码的基本流程详解
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 控件activeX开发之项目ffmpeg解码h264——总结
1. 编译好ffmpeg的lib库和dll库 2. 播放器作为一个dilog类player,然后在ctrol中的oncreate重写方法中用全局属性cplayer *player里new cplaye ...
- 利用ffmpeg解码h264流的代码
这里也直接给出代码: h264dec.h: #pragma once #include "tdll.h" #include "avcodec.h" #inclu ...
随机推荐
- 《Java设计模式》之调停者模式(Mediator)
调停者模式是对象的行为模式.调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用.从而使它们能够较松散地耦合.当这些对象中的某些对象之间的相互作用发生改变时,不会马上影响到其它的一些 ...
- <转>Windows平台下Makefile学习笔记(一)
本文转自:http://blog.csdn.net/clever101/article/details/8147352 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发 ...
- angularjs中的$q
先说说什么是Promise,什么是$q吧.Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered. 什么是Promise 以前了解过 ...
- Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url
Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url 1.1. 原理流程1 2. Invoke1 3. StrutsX2 1.1. 原理流程 读取struts配 ...
- synchronized加static区别
在多线程中,在synchronise方法上加上static 表示的是类锁,锁住的是整个类.而synchroinized 锁住的是当前方法,当前对象.
- GNU LD 脚本学习笔记
LD脚本(linker script)是什么 GNU ld是链接器,ld实际并不是GCC的一部分,ld属于binutils软件包.但是嵌入式开发时,下载的linaro GCC工具集中是包含 arm-l ...
- CSS div固定顶端
position: fixed;原来只需要这么一个设置就可以!
- CentOS7 安装 Node.js
1.首先安装node.js 的版本管理工具 NVM,执行以下命令: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/ ...
- linux下的Java开发 intellij idea+tomcat+maven
前期准备:安装intellij idea.下载tomcat.下载maven(注意我用的是tomcat6.maven 3.2.1.jdk1.6.0_45,之前maven用的3.5结果报错,搞了好久,建议 ...
- Android BroadcastReceiver介绍 (转)
原文地址:http://www.cnblogs.com/trinea/archive/2012/11/09/2763182.html 本文主要介绍BroadcastReceiver的概念.使用.生命周 ...