在WP7上使用MediaStreamSource,MediaElement进行视频播放

时间:2011-10-10 14:34:28

标签: windows-phone-7

我们一直在研究原始H.264和AAC内容的流媒体应用程序。我们使用MediaStreamSource将样本提供给MediaElement,当我们使用PC SilverLight(在IE9上)进行音频/视频播放时,我们不会发现任何问题。纯音频流也适用于WP7。但是,我们在WP7上遇到以下视频播放问题:

•在没有CodecPrivateData的情况下初始化MediaStreamSource的视频流属性时,将调用MediaElement“Failed”事件处理程序,错误代码为3100. Video Stream属性初始化为:

    Dictionary<MediaStreamAttributeKeys, string> videoStreamAttributes = new Dictionary<MediaStreamAttributeKeys, string>();
    videoStreamAttributes[MediaStreamAttributeKeys.VideoFourCC] = "H264";
    this.videoStreamDescription = new MediaStreamDescription(MediaStreamType.Video, videoStreamAttributes);

•使用CodecPrivateData([起始码] [sps] [startcode] [pps])初始化MediaStreamSource的视频流属性时,视频会播放但似乎播放速度要快得多 - 是指定FPS的2到3倍。视频流属性初始化为:

    Dictionary<MediaStreamAttributeKeys, string> videoStreamAttributes = new Dictionary<MediaStreamAttributeKeys, string>();
    videoStreamAttributes[MediaStreamAttributeKeys.VideoFourCC] = "H264";
    videoStreamAttributes[MediaStreamAttributeKeys.CodecPrivateData] = "000000012742000D96540A0FD8080F162EA00000000128CE060C88";
    this.videoStreamDescription = new MediaStreamDescription(MediaStreamType.Video, videoStreamAttributes);

请注意,无论是否带有音频和视频的CodecPrivateData,相同的流在PC SilverLight上都能正常播放。 初始化视频流属性有什么问题吗?什么可能导致这个问题,我们如何解决它?

此致 NKS。

1 个答案:

答案 0 :(得分:1)

这里的问题是用于时间戳的时钟。我们的应用程序用于计算时间戳为90Khz,预期时间戳为1 Mhz。所以所有的帧都在时间过后出现,因此玩家可以尽可能快地播放帧(我也看到了大约120帧/秒的帧)。修复时间戳时钟后,它可以正常工作