2013-03-08 3 views
2

В моем приложении ios я пытаюсь воспроизвести видео с помощью потоковой передачи в реальном времени. Игра идет хорошо, пока я не решит использовать скруббер и не перейду к какой-то точке, которая еще не буферизована. С этого момента звук продолжается, но видео становится черным.ios http live black screen

Я конвертированы мои .mp4 видео с помощью следующей команды:

avconv -y -i video.mp4 -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 640x480 -vcodec libx264 -b 64k -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -trellis 0 -refs 0 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate 64k -bufsize 64k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 30 -qmax 51 -qdiff 4 -level 30 -aspect 640:480 -g 30 -async 2 sample_64.ts 

Я сделал это с несколькими битрейтом (64, 150, 240, 440 и 640) и создал один .m3u8, содержащий различные потоки , После преобразования я использовал mediafilesegmenter для разделения видео в сегментах каждые 10 секунд.

После очистки следующие появится в окне вывода:

2013-03-08 17:30:21.827 Geschiedenis Trainer[88129:19a03] [MPAVController] Autoplay: Disabling autoplay for pause 
2013-03-08 17:30:21.827 Geschiedenis Trainer[88129:19a03] [MPAVController] Autoplay: Disabling autoplay 
2013-03-08 17:30:21.977 Geschiedenis Trainer[88129:19a03] [MPAVController] Autoplay: _streamUnlikelyToKeepUp: 1 -> 0 
2013-03-08 17:30:21.978 Geschiedenis Trainer[88129:19a03] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 1, on player: 0) 
2013-03-08 17:30:21.978 Geschiedenis Trainer[88129:19a03] [MPAVController] Autoplay: _streamRanDry: 0 -> 1 
2013-03-08 17:30:21.980 Geschiedenis Trainer[88129:19a03] [MPAVController] Autoplay: Took background task assertion (32) for playback stall 
2013-03-08 17:30:21.981 Geschiedenis Trainer[88129:19a03] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 1, on player: 0) 
2013-03-08 17:30:22.634 Geschiedenis Trainer[88129:19a03] [MPAVController] Autoplay: _streamUnlikelyToKeepUp: 0 -> 0 
2013-03-08 17:30:22.634 Geschiedenis Trainer[88129:19a03] [MPAVController] Autoplay: _streamRanDry: 0 -> 1 
2013-03-08 17:30:22.667 Geschiedenis Trainer[88129:19a03] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 1, on player: 0) 
2013-03-08 17:30:22.769 Geschiedenis Trainer[88129:19a03] [MPAVController] Autoplay: Ending background task assertion (32) for playback stall 

Код для моего видеоплеера:

self.streamPlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; 
[self.view addSubview:self.streamPlayer.view]; 
[self.streamPlayer setFullscreen:YES animated:YES]; 

Эта проблема не возникает при пропуске до такой степени, что уже забуференном.

ответ

1

Проблема заключалась в конверсии моих видео. Я использовал устаревшую версию avconv/ffmpeg. Я обновил ffmpeg до последней версии (1.1) и решил эту проблему.

После преобразования видео я использовал яблоко mediafilesegmenter, чтобы разделить видео в 10-секундных сегментах. Перед обновлением ffmpeg генерируется ошибка: segment does not contain sync frame для каждого сегмента. После обновления ffmpeg эта ошибка исчезла, а также проблемы с потоковой передачей.