浏览器播放EasyCVR视频广场通道推送音频失败排查及优化

2021-07-14 16:48:39 浏览数 (1)

海康SDK/Ehome/RTSP/GB28181协议安防视频云服务EasyCVR能够通过GB28181协议进行级联,假如摄像头或设备支持音频的话,EasyCVR同样也能够进行音频采集。

EasyCVR添加一个本地流通道,把音频勾选上,在浏览器视频广场播放,浏览器一直出现相同错误,并没有声音输出:“[MSEController] > Failed to execute ‘appendBuffer’ on ‘SourceBuffer’: The HTMLMediaElement.error attribute is not null.”

浏览器启动播放流程序,打印的信息如下:

里面有个RTMP流,这个是往nginx服务端进行推送的流,把原始的RTMP流使用VLC进行播放,出现信息:

此H264视频是可以进行解析的,但是aac音频解析不出来,才导致无法播放。

使用c EasyStreamClient程序,通过修改指令参数,把RTSP往nginx服务端上推流,在使用VLC进行播放,可以出现声音。所以只能分析GO的业务层代码的问题,并对比差异。

分析c EasyStreamClient代码是先各种初始化EasyStreamClient,并设置回调函数;在回调函数中设置EasyRTMP推流参数:EasyRTMP_InitMetadata

而GO业务层都是会先初始化好,向EasyRTMP_InitMetadata填写默认参数,导致里面参数不正确,声音推送错误:

解决此问题,则需要打开流信息,获取到mediainfo的时候把参数设置到EasyRTMP推流中去。修改代码要修改二处:

1、把原来的初始化EasyRTMP_InitMetadata默认参数这个参数注释获取删除:

2、对外暴露一个方法来设置EasyRTMP_InitMetadata函数参数,然后在EasyStreamClient回调函数之后调用:

0 人点赞