高分请教silverlight使用MediaElement播放字节流的问题,不够再加
分数不够再加
我现在自定义了一个StreamSource类,名称为MyMediaStreamSource,继承 MediaStreamSource
流是从另外设备上通过socket发过来的, byte[];
不考虑解码问题,这些都已OK.
创建MediaSource
MyMediaStreamSource mediasource = new MyMediaStreamSource(stream); //这个stream是刚开始接收到的流
mediaElement1.SetSource(mediasource);
mediaElement1.Play();
OK,这里都是正常的,能够播放最开始接收到的音频. 但是音频在不断接收,我需要不断的给mediasource中的stream填充.
当第二次数据过来时.
mediasource.AddStream(stream);// AddStream是自定义的一个方法, stream是第二次收到的数据
问题来了,这样再次加进去的stream, mediaElement根本无法识别到.
找到解决办法:
mediaElement1.Pause(); //先暂停
mediasource.AddStream(stream);//
mediaElement1.Play(); //再播放
这样虽然能解决问题,但是当接收数据速度过快时,哪怕是缓冲区设大一点,总感觉这不是个好办法.
每填充一次数据就需要暂停再播放一次, 因为我的应用对实时音频要求高,不允许太多延时,所以填充数据速度很快.
也就是说在不停的暂停,播放....
所以请教有经验的朋友,这里有什么好的替代方案.
即然是流播放,肯定需要不断的往里添加收到的数据流。但是好像没找到任何这种方法.
我现在自定义了一个StreamSource类,名称为MyMediaStreamSource,继承 MediaStreamSource
流是从另外设备上通过socket发过来的, byte[];
不考虑解码问题,这些都已OK.
创建MediaSource
MyMediaStreamSource mediasource = new MyMediaStreamSource(stream); //这个stream是刚开始接收到的流
mediaElement1.SetSource(mediasource);
mediaElement1.Play();
OK,这里都是正常的,能够播放最开始接收到的音频. 但是音频在不断接收,我需要不断的给mediasource中的stream填充.
当第二次数据过来时.
mediasource.AddStream(stream);// AddStream是自定义的一个方法, stream是第二次收到的数据
问题来了,这样再次加进去的stream, mediaElement根本无法识别到.
找到解决办法:
mediaElement1.Pause(); //先暂停
mediasource.AddStream(stream);//
mediaElement1.Play(); //再播放
这样虽然能解决问题,但是当接收数据速度过快时,哪怕是缓冲区设大一点,总感觉这不是个好办法.
每填充一次数据就需要暂停再播放一次, 因为我的应用对实时音频要求高,不允许太多延时,所以填充数据速度很快.
也就是说在不停的暂停,播放....
所以请教有经验的朋友,这里有什么好的替代方案.
即然是流播放,肯定需要不断的往里添加收到的数据流。但是好像没找到任何这种方法.
...全文
相关推荐
Silverlight在线视频播放器
使用C#所制作的简单的Silverlight在线视频播放器
SilverLight播放视频
SilverLight播放视频,支持多种视频文件的播放
silverlight 播放器
自定义silverlight音乐播放器 支持播放列表选择播放,进度、音量的拖动。
silverlight播放器源码
silverlight播放器源码silverlight播放器源码silverlight播放器源码silverlight播放器源码silverlight播放器源码silverlight播放器源码
Silverlight 视频播放器
下面就来制作一个简易的视频播放器: 1、在XMAL页面中添加一个MediaElement,用以容纳视频文件。 2、拖放一个Slider,用来实时显示视频播放进度。 3、一个TextBlock,用来显示当前播放的时间值。 4、一个TextBlock,用来显示视频的总时间。 5、五个按钮,分别用来进行播放、暂停、继续、停止、全屏操作。 6、一个CheckBox,用来控制静音操作。 7、一个Slider,用来控制媒体音量。



