none
wp7 MediaStreamSource实现播放H264裸码流问题 RRS feed

  • 问题

  • 前几天在网上找了个在 Silverlight 应用程序中实现对 FLV 视频格式的支持的例子,然后将其改写成了wp7上运行的例子,也参照别人的代码实现了解析MP4+h264的的例子,这些都成功移植到了手机上,在模拟器上都能正常播放,甚至将H264裸码流也可以一帧一阵的播放,但是在真机上怎么也播放不了,不知道为什么,特此发出来请各位大侠给点意见.

    2011年12月14日 11:39

全部回复

  • 模拟器都支持,真机一定支持。

    可以直接用真机联条一下。


    专注于Windows Phone
    2011年12月14日 14:23
    版主
  •  

    我播放的视频分辨率是512*288;

    四个属性的设置:

    videoStreamAttributes[MediaStreamAttributeKeys.CodecPrivateData] = "";
    videoStreamAttributes[MediaStreamAttributeKeys.VideoFourCC] = "H264";//实例化视频编码解码器所需的数据。这是一个由四个字符构成的值,也称作 FourCC。
    videoStreamAttributes[MediaStreamAttributeKeys.Width] = "512";
    videoStreamAttributes[MediaStreamAttributeKeys.Height] = "288";

    这种情况下 ,模拟器上能正常播放,但是真机上 MediaElement 报出3100 An error has occurred错误(GetSampleAsync()不会执行),不知道为什么,求解.....

     

    而且

    这四个属性中将MediaStreamAttributeKeys.Width和MediaStreamAttributeKeys.Height改变成大一点的数值,比如720*576真机上GetSampleAsync()会执行,但是执行三四次就停止了,也不报错,程序也没有崩溃,不知道为什么.......

              videoStreamAttributes[MediaStreamAttributeKeys.CodecPrivateData] = "";
             videoStreamAttributes[MediaStreamAttributeKeys.VideoFourCC] = "H264";//实例化视频编码解码器所需的数据。这是一个由四个字符构成的值,也称作 FourCC。
                videoStreamAttributes[MediaStreamAttributeKeys.Width] = "512";
                videoStreamAttributes[MediaStreamAttributeKeys.Height] = "288";

    求解..楼主给点意见啊!!

    到底为什么模拟器上能跑真机不能跑呢!

    2011年12月15日 2:47
  • 通过设置videoStreamAttributes[MediaStreamAttributeKeys.CodecPrivateData] = "";真机上也能放了播放了。

    但是我真机很模拟器上总遇到一个问题:经常MediaElement 报出3100 An error has occurred错误(GetSampleAsync()不会执行),必须重启模拟器后者真机然后才能正常播放。

    不明白为什么,求解?

     

    2011年12月15日 10:14
  • 我和楼主一样,也将这个代码移到WP7平台上,图像是正常的,不过声音有,但不正常,有爆音的现象,但在模拟器上是好的,只有真机有这样的情况。
    2012年3月17日 14:20
  • 可以分享一下移植后的代码吗?我也尝试了移植,但是在模拟器上没有任何问题,在真机上就报3100错误无法播放flv视频。

    谢谢!

    2012年4月7日 23:58
  • 楼主您好,请问您的问题最终解决了吗,我现在也遇到同样的问题,我想参考下您的代码,如果可以,希望您能把代码发我一下,邮箱是:lilipangtou@163.com,非常期待您能早日看到我的回复,更期待在您的帮助下我能解决这个问题。此致!

    2012年5月4日 5:04
  • 又认真研究了一下,现在可以在模拟器上播放了,但是真机上还是不能播放。我没有楼主幸运,设置videoStreamAttributes[MediaStreamAttributeKeys.CodecPrivateData] = "";真机上还是不能播放。


    2012年5月5日 4:23
  • 通过设置videoStreamAttributes[MediaStreamAttributeKeys.CodecPrivateData] = "";真机上也能放了播放了。

    但是我真机很模拟器上总遇到一个问题:经常MediaElement 报出3100 An error has occurred错误(GetSampleAsync()不会执行),必须重启模拟器后者真机然后才能正常播放。

    不明白为什么,求解?

     

    “通过设置videoStreamAttributes[MediaStreamAttributeKeys.CodecPrivateData] = "";真机上也能放了播放了。”

    楼主这里应该是不小心打错了吧?这个跟你最初放不出来的时候的设置不是一样的了吗?根本就没改什么啊?

    我觉得应该是CodecPrivateData的值直接在这里赋给它,而不是赋予一个“”;也就是把264码流的SPS和PPS直接作为字符串写进去。

    eg:

    videoStreamAttributes[MediaStreamAttributeKeys.CodecPrivateData] = "00000001674D001EE7302C12C80000000168C94A3880";

    具体的CodecPrivate的值应该从要播放的码流中获取。

    2012年5月8日 15:17
  • 是的,CodecPrivateData是要设置的,按照flv里面的,提前音频采样率什么的,赋值给CodecPrivateData后,在真机上会有爆音的情况,模拟器里面是好的,有那会同学成功过,拿出来分享分享吧。
    2012年5月30日 10:20