转载自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采集、编码、传输的流程的更多相关文章

  1. 【流媒体】 Android 实时视频编码—H.264硬编码

    [流媒體] Android 实时视频编码—H.264硬编码 SkySeraph Apr 4th 2012 Email:skyseraph00@163.com 1  硬编码 & 软编码 硬编码: ...

  2. 转:MediaCoder H.264格式编码参数设置及详解

    转: http://mediacoder.com.cn/node/81 由于现在大部分视频转码都选择H.264格式进行编码,同时CUDA编码的画质还达不到x264软编码的质量(如果你对画质无要求,可以 ...

  3. 【图像处理】DVR H.264视频编码基本知识

    视频编码技术基本是由ISO/IEC制定的MPEG-x和ITU-T制定的H.26x两大系列视频编码国际标准的推出.从H.261视频编码建议,到 H.262/3.MPEG-1/2/4等都有一个共同的不断追 ...

  4. 嵌入式 RTP通话:视频流(H.264)的传输

    从摄像头获取的视频数据,经过编码后(当然,也可以不编码,如果你觉得也很ok的话),既可以 是  开始的数据是  00 00 40 00 40 11 C1 8C 94字节) 四.RTP视频传输代码 #d ...

  5. Android 实时视频编码—H.264硬编码

    from://http://www.cnblogs.com/skyseraph/archive/2012/04/04/2431771.html 1  硬编码 & 软编码 硬编码:通过调用And ...

  6. 新手学习FFmpeg - 调用API完成录屏并进行H.264编码

    Screen Record H.264 目前在网络传输视频/音频流都一般会采用H.264进行编码,所以尝试调用FFMPEG API完成Mac录屏功能,同时编码为H.264格式. 在上一篇文章中,通过调 ...

  7. 视频基础知识:浅谈视频会议中H.264编码标准的技术发展

    浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...

  8. 基于RTP协议的H.264传输

    1.  引言        随 着信息产业的发展,人们对信息资源的要求已经逐渐由文字和图片过渡到音频和视频,并越来越强调获取资源的实时性和互动性.但人们又面临着另外一种不可避免 的尴尬,就是在网络上看 ...

  9. MPEG-4与H.264的区别 , 编码 以及 应用

    MPEG4是适用于监控领域的压缩技术 MPEG4于1998年11月公布,原预计1999 年1月投入使用的国际标准MPEG4不仅是针对一定比特率下的视频.音频编码,更加注重多媒体系统的交互性和灵活性.M ...

随机推荐

  1. HTML DOM setInterval() 方法

    定义和用法 setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被 ...

  2. crontab + rsyncd同步方案

    目的主机: rsync --daemon [root@iZ23ohdbxmrZ ~]# vim /etc/rsyncd.conf #global settingsport = 873pid file= ...

  3. 20144303石宇森 《Java程序设计》第2周学习总结

    ---恢复内容开始--- 20144303 <Java程序设计>第2周学习总结 教材学习内容总结 一.类型: 1.Java可以区分为基本类型和类类型.类类型也称作参考类型. 2.Java中 ...

  4. ubuntu 18.04在更新软件库时出现E: Release file for http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease is not valid yet...

    1.完整的错误信息如下: E: Release file for http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease i ...

  5. [NOIP2017]时间复杂度

    题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...

  6. 解决github访问慢的问题

    在windows hosts文件末尾增加以下内容 # GitHub Start 192.30.253.112 github.com 192.30.253.119 gist.github.com 151 ...

  7. 2017 ACM/ICPC 南宁区 网络赛 Overlapping Rectangles

    2017-09-24 20:11:21 writer:pprp 找到的大神的代码,直接过了 采用了扫描线+线段树的算法,先码了,作为模板也不错啊 题目链接:https://nanti.jisuanke ...

  8. Linux系统非root用户安装perl模块

    非root权限安装perl 在使用Linux或是unix时,perl是一个非常有用的脚本的语言. 关于perl的模块安装,网上也有很多介绍,一方面可以通过不同套件自带的软件安装工具安装,一方面可以通过 ...

  9. shell中的常用通配符,字符类

    因为 shell 频繁 地使用文件名,shell 提供了特殊字符来帮助你快速指定一组文件名.这些特殊字符叫做通配符. 通配符         意义 * 匹配任意多个字符(包括零个或一个) ? 匹配任意 ...

  10. Ubuntu16.04 安装openssl

    1 下载 https://www.openssl.org/source/ 2 解压 3 安装 # ./config --prefix=/usr/local --openssldir=/usr/loca ...