H.264采集、编码、传输的流程
转载自H.264采集、编码、传输的流程

1 采集到的原始数据放入buf中
2 转化为yuv格式放入yuv
conv.RGB24_to_YV12(buf, yuv,IMAGE_WIDTH, IMAGE_HEIGHT) ;
3 调用编码器进行编码
3.1 从yuv中读取数据到m_pic
read_frame_yuv( &m_Pic, m_pOpt->hin, i_Frame + m_pOpt->i_seek )
m_pOpt->hin即为yuv
3.2 将m_pic编码成nal格式数据
x264_encoder_encode( m_pEnc, &nal, &i_nal, pic, &pic_out )
m_pEnc为编码器句柄
nal为一个数组(一帧可能被编码成多个nal)
3.3 将多个nal格式的数据读到一个m_pdata
x264_nal_encode( m_pData, &i_data, 1, &nal[i] )
1、加上startcode
2、写入nal头部
3、拷贝payload部分
3.4 将m_pdata中数据拷入hout中
write_nalu_bsf( hout, m_pData, i_size ,i_file,dec_out)
dec_out为一块公共数据区域,存放一帧的解码结果,也就是说其中可能包含几个nal的数据
4 调用解码器解码
pdecoder->Decode_frame((char *)VideoCodeDest,inLen,(char *)VideoRGB);
VideoCodeDest为一块公共数据区域,存放一帧的解码结果,也就是说其中可能包含几个nal的数据
输出放到VideoRGB
4.1 取出一个nal的数据去解码
nalLen=GetNextNal(inLen);
通过识别startcode取出一个nal的数据,存放在buf中
consumed_bytes=avcodec_decode_video(avc, picture, &got_picture,(unsigned char*)Buf, nalLen);
avc为编码器句柄
picture存放解码结果
got_picture:没有帧可以被解码则为0
= 有个关键问题
当一帧的原始图像被编码成几个nal:
1.在test264的例子中看到,这几个nal被一块处理,可能会共同写入到结果缓冲区中
2.那么是否这几个nal被解码的结果都是consumed_bytes>0?
3.我的猜想是几个nal的解码结果只有其中一个consumed_bytes>0,其余只会提供参考信息给解码器。
4.是要将nal以流形式还是包形式传输?
第一帧编解码结果:
+ nal[0] {i_ref_idc=0 i_type=6 i_payload=368 ...} x264_nal_t 没有帧被解码
+ nal[1] {i_ref_idc=3 i_type=7 i_payload=19 ...} x264_nal_t 没有帧被解码
+ nal[2] {i_ref_idc=3 i_type=8 i_payload=3 ...} x264_nal_t 没有帧被解码
+ nal[3] {i_ref_idc=3 i_type=5 i_payload=2388 ...} x264_nal_t 被解码
第二帧编解码结果:
+ nal[0] {i_ref_idc=2 i_type=1 i_payload=1278 ...} x264_nal_t 被解码
第n帧编解码结果:
+ nal[0] {i_ref_idc=3 i_type=7 i_payload=19 ...} x264_nal_t 被解码
+ nal[1] {i_ref_idc=3 i_type=8 i_payload=3 ...} x264_nal_t 被解码
+ nal[2] {i_ref_idc=3 i_type=5 i_payload=2342 ...} x264_nal_t 被解码
优先级i_ref_idc为:
enum nal_priority_e
{
NAL_PRIORITY_DISPOSABLE = 0,
NAL_PRIORITY_LOW = 1,
NAL_PRIORITY_HIGH = 2,
NAL_PRIORITY_HIGHEST = 3,
};
nal类型i_type为:
enum nal_unit_type_e
{
NAL_UNKNOWN = 0,
NAL_SLICE = 1,
NAL_SLICE_DPA = 2,
NAL_SLICE_DPB = 3,
NAL_SLICE_DPC = 4,
NAL_SLICE_IDR = 5,
NAL_SEI = 6,
NAL_SPS = 7,
NAL_PPS = 8,
NAL_AUD = 9,
};
H.264采集、编码、传输的流程的更多相关文章
- 【流媒体】 Android 实时视频编码—H.264硬编码
[流媒體] Android 实时视频编码—H.264硬编码 SkySeraph Apr 4th 2012 Email:skyseraph00@163.com 1 硬编码 & 软编码 硬编码: ...
- 转:MediaCoder H.264格式编码参数设置及详解
转: http://mediacoder.com.cn/node/81 由于现在大部分视频转码都选择H.264格式进行编码,同时CUDA编码的画质还达不到x264软编码的质量(如果你对画质无要求,可以 ...
- 【图像处理】DVR H.264视频编码基本知识
视频编码技术基本是由ISO/IEC制定的MPEG-x和ITU-T制定的H.26x两大系列视频编码国际标准的推出.从H.261视频编码建议,到 H.262/3.MPEG-1/2/4等都有一个共同的不断追 ...
- 嵌入式 RTP通话:视频流(H.264)的传输
从摄像头获取的视频数据,经过编码后(当然,也可以不编码,如果你觉得也很ok的话),既可以 是 开始的数据是 00 00 40 00 40 11 C1 8C 94字节) 四.RTP视频传输代码 #d ...
- Android 实时视频编码—H.264硬编码
from://http://www.cnblogs.com/skyseraph/archive/2012/04/04/2431771.html 1 硬编码 & 软编码 硬编码:通过调用And ...
- 新手学习FFmpeg - 调用API完成录屏并进行H.264编码
Screen Record H.264 目前在网络传输视频/音频流都一般会采用H.264进行编码,所以尝试调用FFMPEG API完成Mac录屏功能,同时编码为H.264格式. 在上一篇文章中,通过调 ...
- 视频基础知识:浅谈视频会议中H.264编码标准的技术发展
浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...
- 基于RTP协议的H.264传输
1. 引言 随 着信息产业的发展,人们对信息资源的要求已经逐渐由文字和图片过渡到音频和视频,并越来越强调获取资源的实时性和互动性.但人们又面临着另外一种不可避免 的尴尬,就是在网络上看 ...
- MPEG-4与H.264的区别 , 编码 以及 应用
MPEG4是适用于监控领域的压缩技术 MPEG4于1998年11月公布,原预计1999 年1月投入使用的国际标准MPEG4不仅是针对一定比特率下的视频.音频编码,更加注重多媒体系统的交互性和灵活性.M ...
随机推荐
- CF1157D N Problems During K Days(简单构造)
题目 题目 原数据是水成啥样了,\(<\longrightarrow <=,>=\longrightarrow <=,\)这也能过 被\(hack\)后身败名裂 做法 简单的贪 ...
- Linux ASLR的实现
ASLR大家都会听说过,但是Linux平台下应用程序的ASLR的情况是怎么样的呢?我在这里将ASLR分为几个小的部分来阐述,包括了栈的随机化,堆的随机化,mmap的随机化,以及pie程序运行时的主模块 ...
- mysql对数据库的备份和还原
在对mysql数据库的某个数据库进行备份时,使用 mysqldump命令来进行操作 mysqldump -u root -p db_database_name > /[your_path.mys ...
- Nginx解决post请求405问题
和工商银行的一个合作项目,对方客户端需要请求我们的一个静态页面,但是客户端发送过来的请求方法用的post,日志显示405错误(请求方法错误),正常一个静态页面直接用get请求就可以了,工行那边说写死了 ...
- 生信实验室收集---Dana Pe'er Lab
Dana Pe'er Lab of Computational Systems Biology Dana Pe'er是哥伦比亚大学生物科学系的副教授,被认为是计算系统生物学的主要研究人员之一.Dana ...
- LeetCode——Decode String
Question Given an encoded string, return it's decoded string. The encoding rule is: k[encoded_string ...
- javascript中关于&& 和 || 表达式的小技巧分享
如果你还是新手, 而且读完所有这些技巧的详解和每种技巧是如果工作的以后运用它们, 你会写出更加简练高效的JavaScript程序. 确实, JavaScript高手已经运用这些技巧写出了很多强大, 高 ...
- 自学Java测试代码二String, StringBuffer
2017-08-23 10:38:01 writer:pprp package test; import java.util.*; public class test2 { public static ...
- 在Mac中如何正确地设置JAVA_HOME
前期准备 下载JDK安装包:在JDK1.8下载中选择Mac的JDK安装包 安装JDK:这里只要按照安装指引一步一步安装即可 查找JAVA_HOME 打开Mac的终端,检查JDK是否安装成功:java ...
- Java循环语句之 while
生活中,有些时候为了完成任务,需要重复的进行某些动作.如参加 10000 米长跑,需要绕 400 米的赛道反复的跑 25 圈.在 Java 中实现功能时,也经常需要重复执行某些代码,例如,我们为了表示 ...