2012-04-22 5 views
2

Я пишу приложение для Mac, которое может загружать видео из разных источников на локальный жесткий диск. Пока работает отлично, но я хотел бы позволить пользователю воспроизводить эти видео во время их загрузки. Просматривая документацию для QTKit, я не смог найти какой-либо метод, который позволил бы мне передать данные фильма кусочно на объект QTMovie.Как играть в QuickTime-фильм во время загрузки?

Есть ли способ, которым я могу достичь этого с помощью QTKit, AVFoundation или какой-либо другой системы? Я бы очень хотел, чтобы я не привел ffmpeg или другую стороннюю библиотеку для этого.

+0

Это будет зависеть от формата файла видео. Некоторые форматы предназначены для потоковой передачи, другие не могут быть. –

+0

@Rob, я знаю, что некоторые форматы не могут быть переданы. Большинство фильмов, которые я хочу скачать, должны быть в потоковом формате. Для тех, которые не являются, я отключу функции воспроизведения во время загрузки. Я не прошу о способе сделать невозможное (т. Е. Потоковые фильмы в неприменимых форматах) – Sven

ответ

2

Возможно, вы должны использовать структуру AV Foundation вместо QTKit. Первое, что вы хотите сделать, это прочитать AV Foundation Programming Guide. Хотя руководство сильно относится к iOS, функции AV Foundation доступны на OS X с 10.7.

+0

Спасибо за подсказку, не знал, что AVFoundation также имеется на Mac. Но у этого тоже нет необходимых функций. – Sven

+0

Sven, если вы прокрутите половину страницы вниз по ссылке, есть ссылка раздела «Воспроизведение», которая объясняет, как управлять воспроизведением активов с использованием объекта AVPlayer, а также как отображать видео с помощью объекта AVPlayerLayer. Разве это не то, что вам нужно? Не знаю о способности этих классов читать файл/ресурс, который в настоящее время загружается. –

+1

О, воспроизведение фильма из локальной файловой системы или из URL-адреса потока не является проблемой. Мне нужна информация о том, как играть в фильм во время загрузки. В идеале мне нужно что-то передать в объектах NSData, когда я получаю их из сети. – Sven

3

Проблема заключается в том, как работают фильмы QuickTime. Они не являются файлами, основанными на потоках, поэтому загрузка информации куском за один раз обычно не полезна. Вместо этого они представляют собой файлы на основе атома, и атомы могут войти в любом порядке.
В зависимости от того, как был создан фильм QuickTime, атом «moov» (который обеспечивает важную информацию и требуется для интерпретации медиаданных) может быть (и часто является) в конце файла. Если это в конце, то невозможно воспроизвести фильм, пока он не будет полностью загружен. Если данные moov находятся в начале (например, если кто-то сохранил фильм, используя опцию «Подготовить для Интернета»), QuickTime сможет сразу начать воспроизведение файла.

Только форматы, такие как транспортные потоки MPG, предназначены для потоковой передачи или «прогрессивной загрузки».

+0

Для получения дополнительной информации о том, как работает прогрессивное воспроизведение, вы должны прочитать [Прогрессивное воспроизведение: история атома] (http://fabiensanglard.net/mobile_progressive_playback/index.php). – 0xced

+0

Спасибо, но это не поможет. Большинство файлов фильмов должны быть подготовлены для потоковой передачи, поэтому это не проблема. Мне нужен API для их воспроизведения. – Sven

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