Я пишу видеоплеер для Android для потоковой передачи видео по HLS. На моем сервере есть m3u8-Playlist и .ts-Segments. Мой код выглядит так:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vidSurface = (SurfaceView) findViewById(R.id.surfView);
vidHolder = vidSurface.getHolder();
vidHolder.addCallback(this);
}
public void surfaceCreated(SurfaceHolder arg0) {
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDisplay(vidHolder);
mediaPlayer.setDataSource(vidAddress);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
catch(Exception e){
e.printStackTrace();
}
}
Плеер отлично работает с примером Apple bipbopall.m3u8. Но когда я пытаюсь воспроизвести свой плейлист, возникает эта ошибка:
E/PlaylistFetcher﹕ failed to fetch .ts segment at url 'http://example.com/USSM.mp4Frag1Num0.ts'
E/LiveSession﹕ XXX Received error -1008 from PlaylistFetcher.
E/MediaPlayer﹕ error (1, -1008)
Думаю, есть проблема с расшифровкой файлов AES-128. Расшифровывает ли MediaPlayer файлы самостоятельно, и как я могу проверить, было ли дешифрование успешным? (Я использую последнюю версию Android)
1008
- этоERROR_OUT_OF_RANGE
при попытке получить файл. Как выглядит ваш плейлист? - person aergistal   schedule 27.08.2015#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:NO
#EXT-X-VERSION:2
#EXT-X-KEY:METHOD=AES-128,URI="/hls-vod-enc-key/hlscf.key",IV=0X99b74007b6254e4bd1c6e03631cad15b
#EXT-X-TARGETDURATION:8
#EXTINF:8,
USSM20000051_abr-100.mp4Frag1Num0.ts
#EXTINF:8,
USSM20000051_abr-100.mp4Frag1Num1.ts
#EXTINF:8,
USSM20000051_abr-100.mp4Frag2Num2.ts
#EXTINF:8,
USSM20000051_abr-100.mp4Frag3Num3.ts
#EXT-X-ENDLIST
- person henchman21   schedule 27.08.2015AES
, поскольку v1 и Android могут использовать v2 на 3.x и v3 на 4.x. Вы можете попробовать тот же поток в приложении VLC для Android (не в бета-версии) и посмотреть, работает ли он. Вы также можете включить в нем журнал отладки. - person aergistal   schedule 27.08.2015mp4
файлы передаются по-разному с использованием прогрессивной загрузки. Чтобы проверить шифрование, используйтеopenssl
и попробуйте расшифровать один из сегментов с помощью предоставленного ключа и iv. Используемый алгоритм -aes-128-cbc
. - person aergistal   schedule 27.08.2015.ts
сегменты находятся в контейнере mp4. Этот файл можно воспроизводить, например с VLC-Player - person henchman21   schedule 27.08.2015.ts
также является форматом контейнера. - person aergistal   schedule 27.08.2015