2

我正在通过 Eclipse 为 android 开发一个无线电流应用程序,我想更改我的应用程序的用户代理,因此当有人在播放喊播流时,我可以在 icecast/shoutcast 管理员上远程看到用户代理,即 xxxx怯场 1.2

我正在使用 MediaPlayer 播放流

我发现了以下

“你需要覆盖HTTPDataSource.cpp(参见HTTPDataSource::read_at)。然后将其注入到媒体播放器的核心。:) 先看这个研究——Android框架中媒体播放器创建过程中的事件流”

但是 HTTPDataSource.cpp 的位置在哪里,有人做过吗?

4

2 回答 2

0

MediaPlayer 类提供setDataSource()

public void setDataSource (Context context, Uri uri, Map<String, String> headers);

在您控制 MediaPlayer 实例的应用程序中,在标头映射中传递用户代理,如下所示:

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 xx))。

于 2014-01-07T10:52:23.880 回答
0

如果您使用 MediaPlayer 直接流式传输您的媒体内容,则无法直接设置用户代理。MediaPlayer 内部可能正在使用 HTTPDataSource.cpp 来获取流式传输的内容。如果是这种情况,那么您需要对其进行修改并将框架刷新重新编译到您的设备中然后运行它(如果您只是提供服务,这是无用的,许多用户不会为了运行应用程序而刷新他们的设备)。

您可以尝试一种更痛苦的方法,但这可能会也可能不会成功,当您使用 http-stream 时,您可以获取 http 内容并将有效负载数据写入设备(制作 mp3 文件或其他),然后使用该 mp3 来伪造流媒体播放器。您可以在接收 http 内容时将标头字符串添加到 HttpHost(用户代理字符串?)。

希望这可以帮助。

于 2013-04-21T10:04:27.420 回答