微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android寻找代理流和stagefright播放器的问题

我想从仅在临时时间内有效的URL播放音频流.由于存在缓冲机制,仅通过使用内置的stagefright流功能不能很好地发挥作用(URL将在第二次填充缓冲区时死掉),所以我实现了一个代理流,类似于在npr应用中完成了什么

http://code.google.com/p/npr-android-app/source/browse/trunk/Npr/src/org/npr/android/news/StreamProxy.java

这实际上非常好用,除了一个例外,任何寻求调用都会有效地中断代理流.我很难确定寻觅在舞台表演中的工作方式.每当我寻找时,我都会收到一条消息

01-12 13:35:57.201: ERROR/(4870): Connection reset by peer
01-12 13:35:57.201: ERROR/(4870): java.net.socketException: Connection reset by peer
01-12 13:35:57.201: ERROR/(4870): at org.apache.harmony.luni.platform.OSNetworkSystem.writeSocketImpl(Native Method)
01-12 13:35:57.201: ERROR/(4870):     at org.apache.harmony.luni.platform.OSNetworkSystem.write(OSNetworkSystem.java:723)
01-12 13:35:57.201: ERROR/(4870):     at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:578)
01-12 13:35:57.201: ERROR/(4870):     at org.apache.harmony.luni.net.socketoutputStream.write(SocketoutputStream.java:59)
01-12 13:35:57.201: ERROR/(4870):     at com.soundcloud.utils.StreamProxy.processRequest(StreamProxy.java:209)

然后停顿几秒钟,然后stagefright重试以连接到相同的URL,通常会引发错误(我想是因为未重置代理流).另一个潜在的问题是,代理流似乎总是会线性读取数据源:

while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1) 

我只是在猜测,但我认为为了支持查找,代理从缓冲区读取时必须能够提供偏移量.有没有办法找出从套接字客户端请求的偏移量(预期的查找位置)?

我对套接字的经验有限.有人在这里有实施建议吗?

解决方法:

MediaPlayer正在发出HTTP范围请求,该请求指定播放器期望的字节偏移量.您可以从提交给代理服务器的请求的标头中读取这些范围值.然后,您可以打开仅将这些范围发送回MediaPlayer.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐