我正在开发一个从Android上的HLS实时流中提取id3标签的应用程序。为此,我开发了一个代理服务器,它拦截媒体播放器请求的数据并执行id3提取。媒体播放器请求被代理服务器拦截,服务器将请求中继到远程服务器(托管媒体文件的实际服务器),获取响应并将其(原样)发送到媒体播放器以进行回放。我目前面临的问题是媒体播放器有两种类型的get请求:
GET /hls/live/segm14.ts HTTP / 1.1主机:arbitrarydomain.net连接:keep-alive用户代理: stagefright / 1.2 (Linux; Android 4.1.2)
此请求适用于absolute urls的m3u8文件,并且未被代理拦截
GET /live/fSequence0.ts HTTP / 1.1 User-Agent: Dalvik / 1.6.0 (Linux; U; Android 4.1.2; GT-I8552 Build / JZO54K)主机:arbitrarydomain。 net Connection:Keep-Alive Accept-Encoding:gzip
上述请求适用于relative urls的m3u8文件,并被代理服务器拦截
如您所见, GET 请求都是针对.ts文件的。只有用户代理不同。所以我的问题是:
用户代理差异是否会对请求产生任何影响?
为什么第一个请求来自stagefright(Android Native Media Framework),第二个请求来自Dalvik(VM)?
是否有解决方法(比如强制媒体播放器从dalvik而不是stagefright提出请求)?