一、问题:有现场需要宇视GB28181平台对接SRS,TCP取流,不能播放视频,报以下错误:
二、问题定位:
经查实际原因在这儿找不到H264的起始码,所以未能将视频数据插入列表:
三、问题解决:PS包对比,对比可播放的海康视频截图分析:见下图中绿色框部分为起始码即数据类型,绿框后跟音视频数据。
海康视频H264起始码符合上述代码,为4字节起始码00000001,而宇视视频推过来为3字节起始码000001,造成此处查找错误。可将红框部分做如下修改:并将接口replace_startcode_with_nalulen中的常量4改为3就可兼容两个厂家的设备了。
if (video_data[index] == 0x00 && video_data[index+1] == 0x00 &&
video_data[index+2] == 0x01){
list_index.push_back(index);
}
四、其它:
1,宇视视频配置音频使能后视频不能播放了,经查下图:
选中部分为一个完整音频帧TAG,(灰色框内为此TAG总长度)。看粉色部分宇视为70,海康为AA:
下附TAG头说明:
Audio Tag 数据:
1.首字节前4bit表示SoundFormat,即编码格式。
7 = G.711 A-law logarithmic PCM 此为宇视格式 10 (A)= AAC 此为海康格式
2.首字节第5、6 bit表示SoundRate(采样率) 0 = 5.5 kHz,1 = 11 kHz,2 = 22 kHz,3 = 44 kHz
3.首字节第7bit表示SoundSize,即采样点的大小,仅适用于未压缩格式。压缩格式总是解码。0 = 8-bit samples 1 = 16-bit samples
4.首字节第8bit表示SoundType,即声音类型0 = Mono sound, 1 = Stereo sound
问题原因找到了:目前SRS只支持AAC音频格式,非AAC格式时不能播放。宇视技术称目前GB28181只支持G711,此时在SRS配置中将音频关掉,视频就可正常播放了。
我手上有海康的一款相机到如下配置可实现SRS的音频播放配置,这样音视频均可正常播放,不知道其它设备是否相似。
另:1,如果将此改为G711的格式,海康的设备SRS也播不出视频了。