【问题标题】:Syncronization audio and video同步音视频
【发布时间】:2012-08-29 07:25:14
【问题描述】:

我需要在 Windwso Phone 应用程序中使用 MediaElement 显示流视频。

我从网络服务获取一个包含 H264 格式帧和原始 AAC 字节的流(奇怪,但 ffmpeg 只能使用 -f ac3 参数解析)。

因此,如果尝试仅播放其中一个流(音频或视频),它会播放得很好。但是我在尝试两者时都有问题。

例如,如果我报告不带时间戳的视频样本并报告时间戳的音频,我的视频播放速度会比我需要的快 3 到 5 倍。

MediaStreamSample msSamp = new MediaStreamSample(
                    _videoDesc,
                    vStream,
                    0,
                    vStream.Length,
                    0,
                    _emptySampleDict);

                ReportGetSampleCompleted(msSamp);

从我的网络服务中,我获得了以下格式的视频和音频帧的 DTS 和 PTS:

120665029179960

但是当我将它设置为示例时,我的音频流播放速度太慢并且有延迟。

时基为 90khz。

那么,谁能告诉我如何解决它?也许我应该为样本计算其他时间戳?如果有,请给我指路。

谢谢。

【问题讨论】:

    标签: silverlight windows-phone-7 decode h.264 mediastreamsource


    【解决方案1】:

    好的,我解决了。

    那么,我需要为同步 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 增量相同。

    希望这对某人有所帮助。

    罗马式。

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 1970-01-01
      • 2012-03-16
      • 2012-07-11
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 2012-10-02
      • 2023-03-05
      相关资源
      最近更新 更多