我需要在Windwso Phone应用程序中使用MediaElement显示流视频。
我从Web服务获得一个包含H264格式的帧和raw-AAC字节的流(奇怪,但ffmpeg
只能解析-f ac3
参数。)
因此,如果尝试只播放一个流(音频或视频),它就会很好玩。但尝试两者时我都有问题。
例如,如果我报告的视频样本没有时间戳,并使用时间戳报告音频,那么我的视频播放速度比我需要的快3到5倍。
MediaStreamSample msSamp = new MediaStreamSample(
_videoDesc,
vStream,
0,
vStream.Length,
0,
_emptySampleDict);
ReportGetSampleCompleted(msSamp);
从我的网络服务中,我得到了以下格式的视频和音频帧的DTS和PTS:
120665029179960
但是当我将其设置为示例时,我的音频流播放速度太慢且延迟。
时基是90khz。
那么,有人可以告诉我如何解决它吗?也许我应该计算其他样本的时间戳?如果是这样,请告诉我。
感谢。
答案 0 :(得分:2)
好的,我解决了。
那么,我需要为同步A / V做些什么:
使用帧速率计算每个视频和音频帧的正确时间戳。
例如,对于视频,我有90 kHz,音频为48 kHz,每秒25帧 - 我的帧增量为:
_videoFrameTime = (int)TimeSpan.FromSeconds((double)0.9 / 25).Ticks;
_audioFrameTime = (int)TimeSpan.FromSeconds((double)0.48 / 25).Ticks;
现在我们应该为每个样本添加这些值:
private void GetAudioSample()
{
...
/* Getting sample from buffer */
MediaStreamSample msSamp = new MediaStreamSample(
_audioDesc,
audioStream,
0,
audioStream.Length,
_currentAudioTimeStamp,
_emptySampleDict);
_currentAudioTimeStamp += _audioFrameTime;
ReportGetSampleCompleted(msSamp);
}
对于gettign视频帧方法将与_videoFrameTime增量相同。
希望这对某人有帮助。
罗马。