gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:53 25 4
gpt4 key购买 nike

我想从仅在临时时间内有效的 url 播放音频流。由于缓冲机制(缓冲区第二次填充时 url 将失效),仅通过使用内置的 stagefright 流功能不能很好地发挥作用,因此我实现了一个代理流,类似于在 npr 应用程序中做了什么

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

这实际上工作得很好,除了一个异常(exception),任何搜索调用都会有效地中断代理流。我很难确定在怯场中寻找是如何工作的。每次我寻找时,我都会收到一条消息

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 不断重新连接到代理服务器时,您必须在收到来自客户端的请求和范围(int)后发送状态为 206 的此响应。

String headers += "HTTP/1.1 206 OK\r\n";
headers += "Content-Type: audio/mpeg\r\n";
headers += "Accept-Ranges: bytes\r\n";
headers += "Content-Length: " + (fileSize-range) + "\r\n";
headers += "Content-Range: bytes "+range + "-" + fileSize + "/*\r\n";
headers += "\r\n";

当您收到来自 MediaPlayer 的请求,该请求在 HTTP header 中不包含 Range 时,它​​正在请求一个新的流文件,在这种情况下,您的响应 header 应如下所示:

String headers = "HTTP/1.1 200 OK\r\n";
headers += "Content-Type: audio/mpeg\r\n";
headers += "Accept-Ranges: bytes\r\n";
headers += "Content-Length: " + fileSize + "\r\n";
headers += "\r\n";

尽情享受吧!

关于android 寻找代理流和stagefright 播放器的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4673362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com