Exoplayer - отправляет конкретные заголовки http для получения ключа расшифровки AES - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь воспроизвести список воспроизведения мультимедиа 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, необходимые для запроса ключа дешифрования на второй сервер?

Заранее спасибо

...