打印

RTMP网络推流调试笔记

[复制链接]
538|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Peonys|  楼主 | 2017-10-9 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
RTMP网络推流调试笔记

最近在做RTMP网络推流,遇到了一些问题,现在把这些问题记录一下;

        RTMP网络推流是基于RTMPDUMP来实现的,在刚调试的,把本地的音视频流做了简单的容器封装,推送到服务器;
        在NGINX服务器中音频和视频都可以播放出来,音频出现卡顿,查了一下推流推包时间,发现推包时间不均匀,没有按照时间戳来进行推送,后来把RTMP的推流时间修改为数据包的时间戳后开始推送,在nginx上面的音频和视频的RTMP播放正常了;
        虽然上面的问题基本已经解决,但在wowza上面的问题就比较多了,wowza 播放rtmp 出现音频卡顿,同时不能支持m3u8的视频转换播放;
        这下就比较头疼了,只能把数据一个一个的扣代码了;

1. metadata数据
        在flv中有metadata数据包,在rtmp 中可以不需要推送,推送上去也没有什么影响;
2. sps和pps
        需要在第一次连接后推送到服务器上面;后面是不需要再推送;这个包类型为 AVC sequence header,按照AVCDecoderConfigurationRecord发送就可以,这个参考 标准ISO/IEC 14496-15 中的
5.2.4 小节就可以,注意:
        unsigned int(8) AVCProfileIndication; //sps[1],即0x67 后面那个字节
        unsigned int(8) profile_compatibility; //sps[2]
        unsigned int(8) AVCLevelIndication; //sps[3]
        unsigned int(2) lengthSizeMinusOne; //NALUnitLength 的长度减1,一般为3
        lengthSizeMinusOne 加1 就是NALU 长度字段所占字节数。
        unsigned int(5) numOfSequenceParameterSets; //sps 个数,一般为1
        unsigned int(8) numOfPictureParameterSets; //pps 个数,一般为1
        发送一个pps 和一个sps 就可以了;
3.视频数据的发送
        视频数据正常发送就可以,在前面video tag中配置好后,数据的前面4字节为video数据的长度,后面为h264 nalu数据,这个里面没有00 00 00 01后的数据;
4.音频spicifiConfig包的发送
        这个是在adts中没有配置的参数,像发送视频的sps一样,在连接后就发送一次就可以;
        AAC sequence header也就是包含了AudioSpecificConfig,AudioSpecificConfig包含着一些更加详细音频的信息,AudioSpecificConfig的定义在ISO14496-3中1.6.2.1;在ffmpeg中有对AudioSpecificConfig解析的函数,ff_mpeg4audio_get_config(),可以对比的看一下,理解更深刻。
        AAC raw 这种包含的就是音频ES流了,也就是audio payload.这里不需要添加负载长度,audio tag 中可以解析;
        AudioSpecificConfig 简化格式如下:
                audioObjectType 5bits 编码结构类型,AAC-LC 为2
                samplingFrequencyIndex 4bits 音频采样率索引值
                channelConfiguration 4bits 音频声道数
                GASpecificConfig 该结构包含一下三项
                frameLengthFlag 1bit 标志位,用于表明IMDCT 窗口长度,为0
                dependsOnCoreCoder 1bit 标志位,表明是否依赖corecoder,为0
                extensionFlag 1bit 扩展标志位,选择了AAC-LC,这里必须为0
                AudioSpecificConfig的表有点绕,可以按照上面简化后的格式封装就可以;
              
        经过上面的几个步骤的调整后,wowza 总算是可以播放出音视频数据了,m3u8转码也正常了。
接下来就是稳定性方面的测试了;






相关帖子

沙发
baimiaocun2015| | 2017-10-9 22:14 | 只看该作者
RTMP网络推流是基于RTMPDUMP来实现的,在刚调试的,把本地的音视频流做了简单的容器封装,推送到服务器

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

640

主题

901

帖子

5

粉丝