高分请教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(); //再播放
这样虽然能解决问题,但是当接收数据速度过快时,哪怕是缓冲区设大一点,总感觉这不是个好办法.
每填充一次数据就需要暂停再播放一次, 因为我的应用对实时音频要求高,不允许太多延时,所以填充数据速度很快.
也就是说在不停的暂停,播放....
所以请教有经验的朋友,这里有什么好的替代方案.
即然是流播放,肯定需要不断的往里添加收到的数据流。但是好像没找到任何这种方法.
[解决办法]
没做过这种,友情帮顶..
[解决办法]
这个很强大。我用flash一直没搞出来
[解决办法]
没怎么用过,不过我看了MediaStreamSource的类有几个保护的方法可以重载
ReportSwitchMediaStreamCompleted
和SwitchMediaStreamAsync你看看在这里能管用么
[解决办法]
Silverlight的MediaStreamSource是异步的,预先缓存是播放大文件必须使用的。记得在微软官方看到过相关的例程,你可以下载看看:
http://archive.msdn.microsoft.com/ManagedMediaHelpers
[解决办法]