2012-06-06 2 views
4

Я новый разработчик iOS, я работаю над приложением видеопроигрывателя для сайта для обмена видео, где иногда записывается запись из двух видеопотоков (один показывает ведущий, другой показывает запись его экрана). Я пытаюсь воспроизвести это второе видео с AVFoundation, создав AVPlayer. С некоторыми видео он работает очень хорошо, но с некоторыми другими у него заканчивается память. После долгих исследований выяснилось, что он пытается закрепить все видео в памяти.AVPlayer (и MPMoviePlayerController) пытается буферизовать полное (потоковое) видео, заканчивается память

Я потратил часы на поиски, но ничего не нашел.

Я создал небольшой проект, чтобы продемонстрировать это: github project. Он устанавливает два AVPlayer для двух разных видеопотоков и обновляет пользовательский интерфейс, чтобы показывать загруженные TimeRanges для AVPlayerItem игроков. Для первого видео он только буферизирует ~ 60 секунд, что приятно, но для второго видео он сохраняет буферизацию.

self.player1 = [AVPlayer playerWithURL:url1]; 
self.player2 = [AVPlayer playerWithURL:url2]; 

и две текстовые метки:

self.data1.text = [NSString stringWithFormat:@"Player 1 loadedTimeRanges: %@", 
         self.player1.currentItem.loadedTimeRanges]; 
self.data2.text = [NSString stringWithFormat:@"Player 2 loadedTimeRanges: %@", 
         self.player2.currentItem.loadedTimeRanges]; 

Может быть, это может быть важно: Чрезмерная буферизации видео не имеет звуковую дорожку, только видео.

UPDATE: я воспроизвел эту проблему с помощью MPMoviePlayerController вместо AVPlayer и проверки свойства playableDuration. С первым фильмом он останавливается около 60 секунд, а второй фильм продолжает двигаться, а затем заканчивается память.

UPDATE2: Я получил фактические видеофайлы и поместил их в Dropbox и попытался передать их: тогда у меня нет проблемы! Он буферизирует весь фильм, но он не исчерпывается. У меня заканчивается память, если я передаю их с исходного сайта (нашего сайта для обмена видео). URL-адреса находятся в проекте github.

Я с нетерпением жду любых намеков, что может вызвать это.

Спасибо!

+0

Как указано в Руководстве Apple, не используйте прогрессивную загрузку для больших файлов, кроме собственно HTTP-потоковой передачи. – Till

+0

Привет @ Вот! Спасибо за комментарий! Я не уверен, что понимаю, если я должен изменить приложение для использования потоковой передачи или серверная сторона не в порядке? У меня есть проблема: http: //stream.videotorium.hu: 1935/vtorium/_definst_/mp4: 705/3705/3705_3571_content_hq.mp4/playlist.m3u8? Sessionid = cp8dl757mvqukp0bsoflhd79s0_3705', если я закручиваю его, Я получаю m3u, который содержит еще один URL-адрес, если я завиваю, я получаю m3u с сотнями URL-адресов, таких как 'media_1.ts? Wowzasessionid = 530673462 & sessionid = cp8dl757mvqukp0bsoflhd79s0_3705'. Означает ли это, что серверная сторона отправляет правильный поток? – zsombornagy

ответ

1

Эта проблема действительно вызвана отсутствием звуковой дорожки для видеопотоков, отправленных с медиа-сервера Wowza. (Я вывел из ваших потоков URL-адреса, что вы используете медиа-сервер Wowza для потоковой передачи ваших видео).

Для проверки этой проблемы я создал 5-минутный видеофайл без звуковой дорожки.

mplayer -nolirc -vo null -ao null -frames 0 -identify test_60.mp4 
... 
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family 
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264) 
========================================================================== 
ID_VIDEO_CODEC=ffh264 
Audio: no sound 
Starting playback... 
... 

Затем я добавил mp3-трек в этот видеофайл, используя mp4box.

MP4Box -new -add test_60.mp4 -add test_music.mp3 test_60_music.mp4 

И подтвердил, что действительно была звуковая дорожка.

mplayer -nolirc -vo null -ao null -frames 0 -identify /tmp/test_60_music.mp4 
... 
AUDIO: 44100 Hz, 2 ch, floatle, 320.0 kbit/11.34% (ratio: 40000->352800) 
ID_AUDIO_BITRATE=320000 
ID_AUDIO_RATE=44100 
ID_AUDIO_NCH=2 
Selected audio codec: [ffmp3float] afm: ffmpeg (FFmpeg MPEG layer-3 audio) 
========================================================================== 
AO: [null] 44100Hz 2ch floatle (4 bytes per sample) 
ID_AUDIO_CODEC=ffmp3float 
Starting playback... 
... 

Тогда я поставил как test_60.mp4 и test_60_music.mp4 в каталоге контента Wowza, и протестировали их. Я на самом деле написал небольшое тестовое приложение, подобное вашему, для изучения загруженногоTimeRanges, но просто загрузить видео с помощью сафари с устройства должно быть достаточно, чтобы увидеть разницу.

Я открыл wowza_server: 1935/vod/mp4: test_60.mp4/playlist.m3u8 и нажал на паузу, как только начал играть.Индикатор буфера продолжал расти до тех пор, пока не будет загружено полное 5-минутное видео.

Затем я открыл wowza_server: 1935/vod/mp4: test_60_music.mp4/playlist.m3u8 и сделал то же самое, но был загружен только первый 1/5 (примерно 1 минута).

Так что проблема с пакетизацией Wowza-сервера - обратите внимание, что эта проблема не возникает для меня на медиа-сервере Adobe Flash 5.0. Только 60 секунд буферизуется независимо от того, содержит ли видео звуковую дорожку.

Надеюсь, это полезно. Я попросил о вводе данных от пользователей Wowza по адресу Wowza forums

+0

Спасибо! Я почему-то не заметил вашего ответа :(Наконец я отказался от этой штуки в прошлом году, но в этом году мы продолжим разработку, и мне придется решить эту проблему, хорошо знать, что это действительно связано с отсутствием звука трек, который затем мы можем решить на стороне сервера. Получили ли вы какой-либо ответ на свой отчет об ошибке Wowza? – zsombornagy

+0

Нет ответа - и я сам не смотрел в него больше, чтобы узнать, исправили ли новые версии проблему. –

+0

Ok , спасибо, я, вероятно, посмотрю на это больше в ближайшие пару месяцев, и я обновлю, если найду что-нибудь. – zsombornagy

 Смежные вопросы

  • Нет связанных вопросов^_^