Vincent Tam
Vincent Tam
trace文件能提供一下吗?
@tangmingscau 是这样的,调用网络播放时使用的`BASS.BASS_StreamCreateURL`这个方法会阻塞线程,该方法在prepare()里被调用,prepare()里的代码都用`synchronized`标注代码块了,所以导致这个问题,你试试把`synchronized`去掉看看
建议把网络歌曲的调用部分提取出来,或者单独再开一个FmlPlayer处理网络歌曲。 由于`BASS.BASS_StreamCreateURL`阻塞线程,阻塞后再调用stop之类的一样会阻塞。我想应该是作者在jni层加了锁。 全部取消`synchronized`不可取。由于我在内部维护一个单线程池来处理`BASS.BASS_StreamCreateURL`,但是其后的操作(如stop)没有为其加入线程,在这个思路上你可以试试将其加入线程池或作其他操作。
@tangmingscau 你好,最近工作比较忙,以及在写其他的代码,所以项目暂时放下了没有更新。 网络问题确实比较复杂,不知道你在使用的时候在卡住一段时间后有否接着播放? BASS库的作者说假如断线了不会自动重连,另外他给的建议是监听download来判断,你可以试试设置OnDownloadedListener试试。 quote: > http://www.un4seen.com/forum/?topic=16855.msg117921;topicseen#msg117921 > http://www.un4seen.com/forum/?topic=16949.msg118635;topicseen#msg118635
@xadlovezy 什么音频?能提供Log么
@xadlovezy @WiiliamChik 这是之前加了网络播放的功能后,代码没有调整好的缘故。BASS库创建每一个播放流,都会为其分配一个int类型的句柄,然后所有操作都基于该句柄。目前FmlPlayer内只在其调用prepare后才生成唯一的句柄,而在demo中setLooping在prepare之前,所以才提示“Invalid Handle”,即句柄无效、找不到句柄。 解决方法是,调用prepare后再调用setLooping,或者在FmlPlayer的代码内,找到setSync,将内部的 ```java if (mDataParam != null && mDataParam.fileType == DataParam.FILE_TYPE_URL) { setLooping(isLoop); setVolume(mVolume); setPanning(mPan); } ``` 改为: ```java if (mDataParam != null /*&& mDataParam.fileType == DataParam.FILE_TYPE_URL*/)...
@spellforce 音频流写成pcm文件读取试试
你读入的是什么文件?ogg还是pcm? 如果是pcm,读入之后要先解码才能播放
不好意思比较忙,没有时间看文档了。如果你对实时性要求不高,试试把byte array保存成ogg文件再播放,如果不能播放,试试android的mediaplayer能不能播放
有打印log么?库里都有打印的