首页新闻找找看学习计划

C#中如何处理流媒体的数据发送接收?

0
悬赏园豆:200 [已解决问题] 解决于 2013-01-22 16:32

我现在做个远程播放音乐的功能,说白了就是本地选个mp3放给对方听,但是需要边传边放。

我把文件以4K大小发送,接收端在每接到24K的数据后就播放,现在的问题是,有时某块数据能放,但是大部分是不能放的,很明显,不是每个24K的数据在播放器看起来都像是一个可以放的mp3,这部分不知道该怎么处理?

另外,我对mp3文件格式也不熟,求大师点化!

 

经过测试发现,应该是发送方有问题,我把文件分两次发,只有第一次的能放...是不是每块发送的数据都应该设置个文件头之类的东西?但是我不会...

凹出来的主页 凹出来 | 初学一级 | 园豆:14
提问于:2012-12-17 01:16
< >
分享
最佳答案
0

另一头不能是mp3格式的,换成wma格式,然后文件是边传边转格式,那头 等接收完了再转成mp3

收获园豆:180
neverlost | 小虾三级 |园豆:568 | 2012-12-17 14:30

大哥,我就是要边传边放啊,怎么能等接收完了...

凹出来 | 园豆:14 (初学一级) | 2012-12-17 17:38

@凹出来: 传的时候用wma播放,结束了肯定保存成mp3

neverlost | 园豆:568 (小虾三级) | 2012-12-17 21:43
其他回答(5)
0

4K 太小了吧,改成大一点的试下。先找出问题的所在是大小的问题,还是数据的问题。

geass.. | 园豆:1777 (小虾三级) | 2012-12-17 08:19

发送是4K,但是接收端是至少接到24K才播放的。不过我也觉得应该先试试,到底是解析不了被分块的数据还是分的太小了。

支持(0) 反对(0) 凹出来 | 园豆:14 (初学一级) | 2012-12-17 09:30

@凹出来: 为什么你要设计成 接到24K才播放。

支持(0) 反对(0) geass.. | 园豆:1777 (小虾三级) | 2012-12-17 12:54

@geass..: 当然要缓冲一点再放啊

支持(0) 反对(0) 凹出来 | 园豆:14 (初学一级) | 2012-12-17 12:59
0

这跟速度关系非常大

jason2013 | 园豆:1998 (小虾三级) | 2012-12-17 09:08

本地测试的

支持(0) 反对(0) 凹出来 | 园豆:14 (初学一级) | 2012-12-17 09:28
0

给每块数据一个编号。按照编号可以拿传输进度。

检查最后那个没收到,等待收到了之后就播放。

当然这个只是思路,感觉上没什么问题。不过有点空谈,还是需要LZ多实验。

````` | 园豆:14268 (专家六级) | 2012-12-17 09:38
0

如果采用udp发送接收,需要自己处理接收顺序问题,(如果音质要求严格,还需要处理重发的问题),也就是在数据头上增加一个编号,然后接收后按顺序组合播放;播放时可以使用directsound来处理,可以通过两个线程,一个播放,一个将接收到的数据循环放到缓存区内(网上有很多directsound的例子)。

如果tcp协议,则只需要处理接收后的播放问题。

4k足够大了。

kent06 | 园豆:207 (菜鸟二级) | 2012-12-18 14:52
0

注意,mp3是分帧的,你传的时候注意一下帧边界,尽量让每次传的数据一开始就是一个帧,然后你解码一下就ok

收获园豆:20
firstrose | 园豆:232 (菜鸟二级) | 2012-12-20 12:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册