客户码流wuhan\levira42-2min.mpg,其中有一个节目test1VideoH.264格式,AudioMPEG-2
通常播放第一个循环后,声音或者没有,或者出现间隔性停顿。
把文件stb225\src\comps\phStbAv\src\phStbAv_callbacks.c中的
phStbAv_VideoEventCallback()
phStbAv_AudioEventCallback()得到的各种事件打开,发现播放过程中频繁出现:
 
AudioEventCallback: tmdlAudio_EventIODataExhausted
 
即音频输入数据消耗殆尽。
 
但是,相同的情况在XXX程序上并没有发生。
检查发现,XXX程序在码流结束时会停止音视频,码流开始后重新启动音视频解码。
打开XXXTrace开关,发现XXX监测到码流结束时发现Pat version15变到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的处理有不一致的地方,将参考。