我现在做个远程播放音乐的功能,说白了就是本地选个mp3放给对方听,但是需要边传边放。
我把文件以4K大小发送,接收端在每接到24K的数据后就播放,现在的问题是,有时某块数据能放,但是大部分是不能放的,很明显,不是每个24K的数据在播放器看起来都像是一个可以放的mp3,这部分不知道该怎么处理?
另外,我对mp3文件格式也不熟,求大师点化!
经过测试发现,应该是发送方有问题,我把文件分两次发,只有第一次的能放...是不是每块发送的数据都应该设置个文件头之类的东西?但是我不会...
另一头不能是mp3格式的,换成wma格式,然后文件是边传边转格式,那头 等接收完了再转成mp3
大哥,我就是要边传边放啊,怎么能等接收完了...
@凹出来: 传的时候用wma播放,结束了肯定保存成mp3
4K 太小了吧,改成大一点的试下。先找出问题的所在是大小的问题,还是数据的问题。
发送是4K,但是接收端是至少接到24K才播放的。不过我也觉得应该先试试,到底是解析不了被分块的数据还是分的太小了。
@凹出来: 为什么你要设计成 接到24K才播放。
@geass..: 当然要缓冲一点再放啊
这跟速度关系非常大
本地测试的
如果采用udp发送接收,需要自己处理接收顺序问题,(如果音质要求严格,还需要处理重发的问题),也就是在数据头上增加一个编号,然后接收后按顺序组合播放;播放时可以使用directsound来处理,可以通过两个线程,一个播放,一个将接收到的数据循环放到缓存区内(网上有很多directsound的例子)。
如果tcp协议,则只需要处理接收后的播放问题。
4k足够大了。
注意,mp3是分帧的,你传的时候注意一下帧边界,尽量让每次传的数据一开始就是一个帧,然后你解码一下就ok