我正在通过Eclipse为android开发一个无线电流应用程序,我想更改我的应用程序的用户代理,所以当有人正在播放shoutcast流时,我可以在icecast / shoutcast管理员远程看到用户代理即xxxx而不是stagefright 1.2
我正在使用MediaPlayer播放流
我找到了以下
“你需要覆盖HTTPDataSource.cpp(参见HTTPDataSource :: read_at)。然后将其注入媒体播放器的核心。:)首先看一下这个研究 - 在Android框架中创建媒体播放器时的事件流程“
但HTTPDataSource.cpp在哪里找到,有没有人这样做过?
答案 0 :(得分:0)
如果您使用MediaPlayer直接流式传输媒体内容,则无法直接设置用户代理。内部MediaPlayer可能正在使用HTTPDataSource.cpp来获取流内容。如果是这种情况,那么您需要修改它并重新编译框架刷新到您的设备然后运行它(如果您只提供服务,这是无用的,许多用户不会只是为了运行应用程序而刷新他们的设备)。
你可以尝试一种更痛苦的方式但是可能会或者可能不会成功,因为你正在使用http-stream你可以获得http内容并将有效载荷数据写入设备(制作mp3文件或其他)然后使用该mp3 MediaPlayer中的假流。您可以在接收http内容时将标题字符串添加到HttpHost(用户代理字符串?)。
希望这有帮助。
答案 1 :(得分:0)
MediaPlayer类提供setDataSource()
:
public void setDataSource (Context context, Uri uri, Map<String, String> headers);
在控制MediaPlayer实例的app中,按如下方式在标题映射中传递用户代理:
Map<String, String> headerMap = new HashMap<String, String>();;
headerMap.put("User-Agent", "my user agent value");
mediaPlayer.setDataSource(context, uri, headerMap);
它会覆盖默认的用户代理字符串(stagefright / 1.x(Linux; Android x.x))。