Я новый разработчик 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.
Я с нетерпением жду любых намеков, что может вызвать это.
Спасибо!
Как указано в Руководстве Apple, не используйте прогрессивную загрузку для больших файлов, кроме собственно HTTP-потоковой передачи. – Till
Привет @ Вот! Спасибо за комментарий! Я не уверен, что понимаю, если я должен изменить приложение для использования потоковой передачи или серверная сторона не в порядке? У меня есть проблема: 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