Я пытаюсь воспроизвести список воспроизведения мультимедиа HLS с помощью Exoplayer 2.7.3.URL-адрес манифеста (файл m3u8) запрашивается с одного сервера (Akamaihd.net), но ключ для дешифрования файлов TS получается с другого сервера (mediaset.es), которому нужны свои собственные заголовки (включая cookie), отличные отзаголовки, необходимые для получения файла m3u8.Сценарий:
URL-адрес файла m3u8:
https://mdslivehlsb-i.akamaihd.net/hls/live/623617/energy/bitrate_4.m3u8
http-заголовки для получения этого файла m3u8:
. Accept: */*
. Accept-Encoding: gzip, deflate, br
. Connection: keep-alive
. Cookie: _alid_=JI5fkmR9nXtRAn/z+dOR/Q==; hdntl=exp=1545916363~acl=%2fhls%2flive%2f623617%2fenergy%2f*~data=hdntl~hmac=f12cff2e63f5277b642da3e2f5c041110f379b19db2994cbb7af815179f3462b; removed_hdnts=st=1545829964~exp=1545829971~acl=/hls/live/623617/energy/*~hmac=843c426ae453a991274cb4b51904c7c05fbb057638c1447717d67fe199b212c2
. Host: mdslivehlsb-i.akamaihd.net
. Origin: https://www.mitele.es
Ответ http:
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:154582991
#EXT-X-KEY:METHOD=AES-128,URI="https://gatekeeper.mediaset.es/key/energy/akamai",IV=0x88888000000000000000000000000000
#EXT-X-PROGRAM-DATE-TIME:2018-12-26T14:11:42.000+0100
#EXTINF:10,
0/br1/181205091606/85880/154582991.ts
…..
Таким образом, ключ должен быть получен из:
https://gatekeeper.mediaset.es/key/energy/akamai
, для которого нужны эти другие http-заголовки:
authority: gatekeeper.mediaset.es
accept-language: es-ES,es;q=0.9
cookie: gtk=54a1565d55aaf9b18f7e417036
origin: https://www.mitele.es
Referer: https://www.mitele.es/live/index.html?alias=energy
С помощью "getDefaultRequestProperties ()" Iустановите заголовки на сервер akamaidh для получения файла m3u8:
private MediaSource buildMediaSourceHlsMedia(Uri uri) throws MalformedURLException {
MediaSource ms;
int minLoadableRetryCount;
String UserAgent = UserAgentDefinido(uri);
CustomHttpDataSourceFactoryMitele factory = new CustomHttpDataSourceFactoryMitele(UserAgent, null, DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS, true, null);
// here I set the akamaihd headers:
dataSourceWithHeadersMitele(factory, uri.toString());
ms = new HlsMediaSource.Factory(factory).setMinLoadableRetryCount(5).createMediaSource(uri);
return ms;
}
private void dataSourceWithHeadersMitele(CustomHttpDataSourceFactoryMitele datasourceOriginal, String urifinal) throws MalformedURLException {
URL url = new URL(urifinal);
datasourceOriginal.getDefaultRequestProperties().set("Host", url.getHost());
datasourceOriginal.getDefaultRequestProperties().set("Accept", "*/*");
datasourceOriginal.getDefaultRequestProperties().set("Accept-Language", "es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3");
datasourceOriginal.getDefaultRequestProperties().set("Accept-Encoding", "gzip, deflate, br");
datasourceOriginal.getDefaultRequestProperties().set("Referer", "https://www.mitele.es/live/index.html?alias=energy");
datasourceOriginal.getDefaultRequestProperties().set("Origin", "https://www.mitele.es");
datasourceOriginal.getDefaultRequestProperties().set("Connection", "keep-alive");
datasourceOriginal.getDefaultRequestProperties().set("Cookie", mCookies);
datasourceOriginal.getDefaultRequestProperties().set("Pragma", "no-cache");
datasourceOriginal.getDefaultRequestProperties().set("Cache-Control", "no-cache");
}
Как и где я могу установить заголовки http, необходимые для запроса ключа дешифрования на второй сервер?
Заранее спасибо