gpt4 book ai didi

android - 在android中创建一个代理服务器来拦截媒体播放器的请求和响应

转载 作者:行者123 更新时间:2023-11-29 21:20:06 26 4
gpt4 key购买 nike

我正在尝试从 Android 设备上的实时流中提取 ID3 标签。默认情况下,从直播流中提取 ID3 标签在 Android 中不可用。

我想遵循的方法是在代理服务器中拦截媒体播放器请求和响应,并分析字节数据以提取 ID3 标签。 access to media player cache给了我们一个实现这个的粗略想法,但我不确定我们是否能够代理媒体播放器请求/响应。如果有人这样做过或对此有任何指示,那将非常有帮助......

谢谢

最佳答案

您必须为 MediaPlayer 提供本地主机地址并监听您指定的端口。例如,如果您已将代理服务器设置为监听端口 8090,则可以将数据源设置为:

mp.setDataSource(whateverContext, Uri.parse("http://127.0.0.1:8090"));

然后您将收到来自您必须响应的 MediaPlayer 的请求。为了正确响应,您只需将请求转发到远程媒体服务器(原始 URI)。为了简单起见,您可以使用 AndroidHttpClient 发出请求。当您从远程服务器获得响应时,您需要将该数据写入 MediaPlayer 打开的套接字,首先是 HTTP header ,然后是相关实体的二进制数据。

编辑:

我没看过this project非常多,但它经常被提及为使用 MediaPlayer 代理的原型(prototype)项目。他们做代理工作的类(class)看起来是StreamProxy.java .他们使用 DefaultHttpClient 而不是 AndroidHttpClient,但它与我描述的基本相同。请特别注意它们的 processRequest 方法。以下包含该方法的摘录和我的评论:

// Execute the HttpRequest and receive an HttpResponse
HttpResponse realResponse = download(url);
// ...
// Retrieve the response entity as an InputStream
InputStream data = realResponse.getEntity().getContent();
// ...
try {
// The response headers have been concatenated into httpString,
// so write the headers to the client socket
byte[] buffer = httpString.toString().getBytes();
client.getOutputStream().write(buffer, 0, buffer.length);
// Write the entity data to the client socket (repeatedly read from
// the entity stream and write to the client socket)
byte[] buff = new byte[1024 * 50];
while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1) {
client.getOutputStream().write(buff, 0, readBytes);
}
} // ...

关于android - 在android中创建一个代理服务器来拦截媒体播放器的请求和响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20835478/

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