XXX客户的直播流是rtmp push 进入Wowza Streaming Engine的,在确认流已经注入成功后,客户用Http REST API 去启动录制。要求录制的文件格式是flv。比如这是一堂在线教育的课程,可能要录制30分钟到1个小时。
录制完成后,客户将flv文件下载下来,再用ffmpeg转换为mp4后提供给老师,用于事后本地观看(当然Wowza也支持录制为mp4,只是在这个案例中客户将它录制为flv了)。 例如用Windows Media player播放视频文件,但发现音视频不同步,声音落后于画面的播放进度(大概迟了1秒)。 同时,发现用VLC本地播放或者用H5网络播放(HLS)并没有音视频不同步的现象。
然后客户用flvAnalyser软件对这个flv做了分析,如下图所示:
根据这个软件的分析,在flv的script信息之后紧跟着视频(H.264)的AVC Sequence Header,里面包含SPS和PPS信息,而在1秒多以后才有了第一个视频关键帧。
另外,据客户介绍,这个情况只是偶尔发生,特别是针对GOP比较大的情况下(比如GOP大于8秒)。而且只要这个视频关键帧滞后了,在Windows Media player下一定会出现音视频不同步的情况。
当然,你可以说这可能是WindowsMedia Player的兼容性问题,因为毕竟VLC、QQ影音、H5网络播放都是正常的。
但是,客户还是希望能让WowzaStreaming Engine在录制时避免这个问题。
根据前面的录制参数,我们大体清楚了WowzaStreaming Engine在开始录制时的几种可能的策略,再结合这个案例的情况,应该可以推测出来Wowza Streaming Engine在开始录制时确实等了至少1秒后才 检测到了视频关键帧。那么解决的方法/思路大致如下:
1. 让编码端(比如主播端)采用更小的GOP,比如2秒。这样检测到(遇到)关键帧的速度会更快。
2. 设定2-3倍GOP大小的backBufferTime,这样至少可以让Wowza Streaming Engine快速找到2-3个关键帧。如果说找到一个关键帧还不足以开始录制的话,2-3个总是可以启动录制了吧?不至于在视频关键帧前录了过多的音频。
3.其它Wowza StreamingEngine的录制参数,采用默认值即可,即startOnKeyFrame为true, defaultAudioSearchPostion为true。
其实,大家可以看出来,问题的关键还是在于编码端的GOP设置。如果GOP设置过大,对于直播业务,无论如何也是不可取的。
其实也没有太复杂。还是得多做测试。
Wowza Streaming Engine 4是业界功能全面、API接口丰富的流媒体Server产品,采用它作为流媒体服务器产品的案例很多,直播、在线教育、IPTV都有它的用武之地。
京ICP备09015132号-996 | 网络文化经营许可证京网文[2017]4225-497号 | 违法和不良信息举报电话:4006561155
© Copyright 2000-2023 北京哲想软件有限公司版权所有 | 地址:北京市海淀区西三环北路50号豪柏大厦C2座11层1105室