rtmp发送H264及aac的音视频 (转)

RTMP推送的音视频流的封装形式和FLV格式相似,由此可知,向FMS推送H264和AAC直播流,需要首先发送"AVC sequence header"和"AAC sequence header",这两项数据包含的是重要的编码信息,没有它们,解码器将无法解码。

  AVC sequence header就是AVCDecoderConfigurationRecord结构,该结构在标准文档“ISO-14496-15 AVC file format”中有详细说明。

  AAC sequence header存放的是AudioSpecificConfig结构,该结构则在“ISO-14496-3 Audio”中描述。AudioSpecificConfig结构的描述非常复杂,这里我做一下简化,事先设定要将要编码的音频格式,其中,选择"AAC-LC"为音频编码,音频采样率为44100,于是AudioSpecificConfig简化为下表:

  这样,AVC sequence header和AAC sequence header的内容可以基本确定了,更详细的信息,大家可以去翻阅相关文档。

在发送这两个header需要在前面分别加上 VideoTags、AudioTags  这连个tags都是1个字节(8bits)的数据

其中AudioTags每bit表示的意义如下图:

其中SoundData 的组成如下:

当数据的第一个字节为0时,后面跟AAC sequence header;

当数据的第一个字节为1时,后面跟AAC 数据;

其中VideoTags每bit表示的意义如下图:

发送的为avc数据,所以,CodecID(后4bit)的值为7

所以videodata的数据打包方式为 ,具体的信息见下图:

具体代码实现:

//添加Flv的VideoTags char* RtmpLiveEncoder::AddVideoTags(char* buf,bool isKeyframe) { //前面4字节表示FrameType,后面4字节表示CodecID unsigned char flag = 0; if (isKeyframe) flag = 0x17; else flag = 0x27;
buf = UI08ToBytes(buf, flag); buf = UI08ToBytes(buf, 1);    // avc packet type (0, nalu)  包的类型,同步包为0 buf = UI24ToBytes(buf, 0);    // composition time  0为打开,1为关闭
return buf; } //添加Flv的AudioTags char* RtmpLiveEncoder::AddAudioTags(char* buf) { // unsigned char flag = 0; flag = (10 << 4) |  // soundformat "10 == AAC" (3 << 2) |      // soundrate   "3  == 44-kHZ" (1 << 1) |      // soundsize   "1  == 16bit" 1;              // soundtype   "1  == Stereo"
buf = UI08ToBytes(buf, flag);  buf = UI08ToBytes(buf, 1);    // aac packet type (1, raw)  包的类型,同步包为0
return buf; }

这两个函数返回的buf后面接需要发送的数据

时间: 2024-11-04 03:23:51

rtmp发送H264及aac的音视频 (转)的相关文章

(1)h264 ,mpeg4 ,aac 等音视频格式及其基础详解

以下一系列文章均来于网络,其目录如下: h264 ,mpeg4 ,aac 等音视频格式及其基础详解 codec类型 mpeg系列——mpeg1和Mmpeg2 mpeg系列——mpeg4 mpeg系列——aac音频 H26x系列 容器(上) 容器(下) 一 基本概念 1 编解码 编解码器(codec)指的是一个能够对一个信号或者一个数据流进行变换的设备或者程序.这里指的变换既包括将信号或者数据流进行编码(通常是为了传输.存储或者加密)或者提取得到一个编码流的操作,也包括为了观察或者处理从这个编码流

使用librtmp进行H264与AAC直播

libx264 版本是 128 libfaac 版本是 1.28 1.帧的划分 1.1 H.264 帧 对于 H.264 而言每帧的界定符为 00 00 00 01 或者 00 00 01. 比如下面的 h264 文件片断这就包含三帧数据: 00 00 00 01 67 42 C0 28 DA 01 E0 08 9F 96 10 00 00 03 00 10 00 00 03 01 48 F1 83 2A 00 00 00 01 68 CE 3C 80 00 00 01 06 05 FF FF

网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient

前言 最近在项目中遇到一个奇怪的问题,同样的SDK调用,访问海康摄像机的RTSP流,发保活OPTIONS命令保活,一个正常,而另一个一发就会被IPC断开,先看现场截图: 图1:发OPTIONS,摄像机立马断流 图2:但在另一个程序中发OPTIONS保活包又不断流 在大部分的摄像机上,都没什么问题,单单在海康的这一款摄像机中出现了这种问题,不仔细对比命令行中的输出,根本无法确定问题点,图2中的OPTIONS报文中携带了Authorization的头字段,将认证信息都带入了进来,而图1中只是简单将用

即时通讯——详解音视频同步技术

转自:http://tieba.baidu.com/p/2138076570 摘要:针对网络传输中由于延迟.抖动.网络传输条件变化等因素引起的音视频不同步的问题,设计并实现了一种适应不同网络条件的音视频同步方案.利用音视频编码技术AMR-WB和H.264具有在复杂网络环境中速率可选择的特性,结合RTP时间戳和RTCP反馈检测QOS,通过控制音视频编码方式,实现了动态网络环境下的音视频同步方案.重点介绍了可靠网络环境和动态网络环境下同步算法的设计过程,并通过实际测试验证了此方案的可行性.结果表明,

C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播

C++实现RTMP协议发送H.264编码及AAC编码的音视频 RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系Flash Player和RtmpServer,如FMS, Red5, crtmpserver等.RTMP协议可用于实现直播.点播应用,通过FMLE(Flash Media Live Encoder)推送音视频数据至RtmpServer,可

C++实现RTMP协议发送H.264编码及AAC编码的音视频

转自:http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系Flash Player和RtmpServer,如FMS, Red5, crtmpserver等.RTMP协议可用于实现直播.点播应用,通过FMLE(Flash Me

(转)C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播

转:http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系Flash Player和RtmpServer,如FMS, Red5, crtmpserver等.RTMP

H264音视频直播系统 服务器端+客户端源码 可用于视频聊天、视频会议

H264音视频直播系统  服务器端+客户端源码 可用于视频聊天.视频会议 RTP协议实现音视频网络实时直播,采用H.264和AAC编码,码率极低,同时有较高的视频清晰度和音频音质,可用于视频聊天.视频会议.摄像头监控等多种应用场景. 发布端,选择视频和音频设备,指定服务器发布直播源 接收端,接收发布者的音视频并播放.占用带宽很低,如图所示.采用动态码率,平时在4~5KB/s左右,动作幅度较大时在8KB/s. C++代码,VS2010工程,包含全部代码,不用其它依赖项,可直接编译 接口调用简单

第六十篇、音视频采集硬编码(H264+ACC)

使用 AVCaptureSession进行实时采集音视频(YUV.),编码 通过AVCaptureVideoDataOutputSampleBufferDelegate获取到音视频buffer- 数据 分别对音视频原始数据进行编码 传输 ViewController // // ViewController.h // H264AACEncode // // Created by ZhangWen on 15/10/14. // Copyright ? 2015年 Zhangwen. All ri