客户码流
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的处理有不一致的地方,将参考。