节目声音间隔性停顿问题分析

客户码流 wuhan\levira42-2min.mpg ,其中有一个节目 test1 Video H.264 格式, Audio MPEG-2
通常播放第一个循环后,声音或者没有,或者出现间隔性停顿。
把文件 stb225\src\comps\phStbAv\src\phStbAv_callbacks.c 中的
phStbAv_VideoEventCallback()
phStbAv_AudioEventCallback() 得到的各种事件打开,发现播放过程中频繁出现:
 
AudioEventCallback: tmdlAudio_EventIODataExhausted
 
即音频输入数据消耗殆尽。
 
但是,相同的情况在XXX 程序上并没有发生。
检查发现, XXX 程序在码流结束时会停止音视频,码流开始后重新启动音视频解码。
打开XXX Trace 开关,发现 XXX 监测到码流结束时发现 Pat version 15 变到 30 之后到 0 。因此采取了重启服务的过程(包括 reset video & audio 解码)。
 
这样看来 XXX 的良好表现只是一个巧合,如果把 pat 的监测关闭,其结果和客户应用,甚至 exStbDemo 程序一致,属于 SDK 音视频同步问题。
 
检查音视频同步机制,为 Pts lock 模式,改成其它模式没有改善。
( 见: stb225\src\comps\phStbAv\src\phStbAv.c 
videoSyncMode 初始设置和在 phStbAv_SetSyncMode()
应用程序可以通过 DirectFb api 进行设置,如下:
vidAttr.video.features |= PH_STBAV_FEATURES_VIDEO_PTSLOCK;
gfx_videoProvider[which].instance->SetAttributes(gfx_videoProvider[which].instance, vidAttr);
 
另外一个发现就是:如果音视频流从 demux 直接导入 decoders (即不 enable dvr ),没有这种问题。
 
建议该问题的处理方法可以参考 XXX ,支持 pat 的变化监测达到重启服务的效果。
 

SDK也将继续改进,我们的huangpu application在播放该节目时,没有问题,估计SDK的处理有不一致的地方,将参考。

你可能感兴趣的:(职场,休闲,声音)