Как расшифровать видео hls - PullRequest
0 голосов
/ 16 мая 2019

Мое требование - воспроизводить зашифрованные hls видеофайлы из локального хранилища в android.Я использовал NanoHTTPD для создания и запуска локального сервера.Оттуда я подаю .ts и .m3u8 файлы.Для воспроизведения этого видео ExoPlayer нужен ключ для расшифровки файлов, и поэтому я сделал URL: http://localhost:4990/dataKey.

Вот мой класс локального сервера:

import android.os.Environment;
import android.util.Log;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Map;

import fi.iki.elonen.NanoHTTPD;

public class LocalStreamingServer extends NanoHTTPD{
    public LocalStreamingServer(int port){
        super(port);

    }

    @Override
    public Response serve(IHTTPSession session){
        Log.e("req", session.getUri());

        if(session.getUri().equalsIgnoreCase("/dataKey")){

            return newFixedLengthResponse(Response.Status.OK, "txt", "what is the key?");
        }

        if(session.getUri().contains("m3u8")){
            String path = Environment.getExternalStorageDirectory().toString() + "/s3" + session.getUri();

            FileInputStream fis = null;
            File f = new File(path);
            try {
                fis = new FileInputStream(f);
            } catch (FileNotFoundException e) {
            }
            return newFixedLengthResponse(Response.Status.OK, "m3u8", fis, f.length());
        }

        if(session.getUri().endsWith("ts")){
            String path = Environment.getExternalStorageDirectory().toString() + "/s3" + session.getUri();

            FileInputStream fis = null;
            File f = new File(path);
            try {
                fis = new FileInputStream(f);
            } catch (FileNotFoundException e) {

            }
            return newFixedLengthResponse(Response.Status.OK, "ts", fis, f.length());
        }

        String path = Environment.getExternalStorageDirectory().toString() + "/s3/master.m3u8";

        FileInputStream fis = null;
        File f = new File(path);
        try {
            fis = new FileInputStream(f);
        } catch (FileNotFoundException e) {
        }
        return newFixedLengthResponse(Response.Status.OK, "m3u8", fis, f.length());
    }
}

Iперекодировали видео используя ffmpeg.Мне нужно знать, какие данные или ключ должны быть возвращены при вызове url dataKey.Я зашифровал видео с помощью этих ключей:

key=617D8A125A284DF48E3C6B1866348A3F
IV=5ff82ce11c7e73dcdf7e73cacd0ef98

Я не могу понять, какие из них необходимо вернуть из URL-адреса datakey.Оба они не работают.Exoplayer отправляет сообщение об ошибке: java.security.InvalidKeyException: Unsupported key size

Может ли кто-нибудь помочь мне в этом?

...