Концепции программирования
Представленный в конце 1990-х, Видео DVD является стандартом для того, чтобы сохранить и воспроизвести аудио и видео на дисках DVD-ROM. Видео DVD является захватывающей мультимедийной технологией, и DVD Playback Services делает эту технологию доступной и простой в использовании для разработчиков, пишущих приложения Mac. DVD Playback Services позволяет управлять всеми аспектами Воспроизведения видео DVD без беспокойства о сложных подробных данных получения потока мультимедийного контента от диска до пользователя. Можно использовать DVD Playback Services, чтобы записать собственный DVD-плеер или использовать его для слияния функций воспроизведения в существующее приложение. В этой главе описываются понятия, которые необходимо будет понять, прежде чем Вы начнете использовать DVD Playback Services.
Архитектура воспроизведения DVD
DVD Playback Services предоставляет уровень абстракции программисту, скрывающему сложность обработки воспроизведения. API включает основной набор функций, которые являются близко выровненные к средствам управления на типичном DVD-плеере и другим функциям для реализования расширенных опций, таких как закладки и обновления кода области. Схема на рисунке 1-1 показывает упрощенное, высокоуровневое представление того, как работает DVD Playback Services.
Интерфейс передачи данных читает носители и создает потоки данных для видео, аудио, деталей изображения, навигации, и т.д. (Детали изображения являются растровыми оверлейными программами, используемыми для подзаголовков, заголовков и другого статического визуального содержания.) Навигатор DVD управляет пользовательским интерфейсом DVD и управляет воспроизведением. Меню используются для выбора содержания, и в некоторых случаях для управления функцией. Содержание состоит максимум из 99 заголовков, и каждый заголовок разделен на один или несколько последовательные части (главы). Декодеры носителей обрабатывают дешифрование и декодирование сжатых видеопотоков и потоков аудиоданных. Воспроизведение DVD поддерживает MPEG 1 и MPEG 2 видеокодека, и PCM, AC 3 и аудиокодеки MPEG. Видео каналы составляются для дисплея в окне Carbon или Cocoa. Аудиоданные преобразовываются в аналоговый выход стерео.
Сеанс воспроизведения
DVD Playback Services использует понятие сеанса воспроизведения. Сеанс воспроизведения является соединением между процессом и платформой воспроизведения DVD. Только один сеанс возможен за один раз на данной компьютерной системе. (Это необходимо, потому что на определенных компьютерных системах графические драйверы I/O не повторно используемы.) Когда Вы вызываете, новый сеанс начинается DVDInitialize
функция и концы, когда Вы вызываете DVDDispose
функция.
Сеансы многопоточны. Все получение обрабатывается в основном потоке. Если Вы реализуете функцию обратного вызова и регистрируете функцию в DVD Playback Services, функция всегда вызывается в потоке кроме основного потока.
Во время сеанса воспроизведения DVD Playback Services поддерживает информацию состояния от Вашего имени. Можно использовать функции средства доступа такой как DVDGetTitle
для выяснения определенную информацию состояния, или можно получить уведомления о событиях изменения состояния путем регистрации функции обратного вызова. Уведомления обсуждены более подробно в следующем разделе DVD Events.
События DVD
DVD Playback Services обеспечивает функции средства доступа для получения текущей стоимости различных параметров состояния во время воспроизведения. Например, можно использовать DVDGetTime
функция, чтобы узнать, изменилось ли прошедшее время воспроизведения. Возможно обнаружить изменения состояния путем вызывания функции средства доступа неоднократно; эта практика часто упоминается как опрос. Опрос может использовать много циклов, и его использованию обычно обескураживают в приложениях Mac.
Для избавления от необходимости опрос DVD Playback Services определяет ряд вызванных событий DVD событий уведомления. События DVD используются для уведомления приложения важных изменений состояния. События Most DVD включают одно или два целочисленных значения, указывающие что-то о текущем состоянии воспроизведения. Для получения мероприятий DVD Вы регистрируете одну или более функций обратного вызова. Можно зарегистрировать отдельную функцию обратного вызова, чтобы обработать многократные события или использовать несколько различных обратных вызовов.
Например, можно хотеть реализовать часы, чтобы показать пользователю, сколько времени играл текущий заголовок. Лучший способ отслеживать текущее время воспроизведения состоит в том, чтобы зарегистрировать обратный вызов для получения kDVDEventTitleTime
событие. Это событие передает прошедшее время и продолжительность текущего заголовка к Вашему приложению в равном интервале, которым можно управлять.
Для приобретения знаний о различных типах событий DVD см. «Коды события» в разделе констант Ссылки Платформы воспроизведения DVD.
Папки носителей
Видео DVD носители включаются в папку со стандартным именем. В носителях стандартного определения папку называют VIDEO_TS. На диске DVD папка носителей расположена на корневом уровне файловой системы Universal Disc Format (UDF) диска. Папки носителей могут также быть сохранены где угодно на жестком диске; это могло бы произойти при авторской разработке носителей сами. Папка носителей обычно содержит много различных файлов и папок в стандартной конфигурации.
При использовании DVD Playback Services для открытия носителей DVD-Video для воспроизведения, необходимо указать полный путь к папке носителей на смонтированном дисковом томе или жестком диске. Например, путь к носителям на диске DVD мог бы быть /Volumes/MY_MOVIE/VIDEO_TS
. Прежде, чем попытаться открыть носители, DVD Playback Services проверяет папку носителей, чтобы удостовериться, что ее структура допустима. Кроме того, коды области носителей проверяются по коду области, в настоящее время присваиваемому DVD-приводу, чтобы удостовериться, что носители авторизовываются для воспроизведения в диске.
После открытия носителей DVD-Video можно попросить у DVD Playback Services уникального 64-разрядного идентификатора или носителей носителей ID. Можно использовать это носители ID как ключ для сохранения информации о носителях в файле для более позднего использования.
Исключения и обработка ошибок
Почти все функции в DVD Playback Services возвращают код результата, любой нуль (noErr
) указать успех или отрицательное целое число для указания, почему функция перестала работать. DVD Playback Services определяет несколько дюжин кодов результата. Обычно ненулевой код результата указывает одну из двух вещей:
Работа не разрешена из-за текущего состояния воспроизведения. Например, если никакая папка носителей не открыта, и Вы вызываете
DVDPlay
функция, ничто не происходит, и функция пасует назад код результатаkDVDErrorNoValidMedia
.Работа не разрешена носителями сама. Авторы носителей DVD могут поместить ограничения на различные операции. Когда DVD Playback Services осуществляет одно из этих ограничений, это возвращает код результата
kDVDErrorUserActionNoOp
.
Более серьезные исключения или ошибки могут также произойти. Эти ошибки сообщены к Вашему приложению путем вызова одной из пользовательских функций обратного вызова, которые Вы регистрируете. Существует два типа серьезных ошибок: ошибки, сообщенные с ошибочным событием DVD (kDVDEventError
), и ошибки I/O сигнализировали путем вызова функции обратного вызова фатальной ошибки, которую Вы реализуете и регистрируете. При получении серьезной ошибки необходимо сразу закончить сеанс воспроизведения.
Видеоокна
Видеоокно является просто окном Carbon или Cocoa, которое Вы создаете и используете для Воспроизведения видео DVD. DVD Playback Services поддерживает использование единственного окна для воспроизведения. Необходимо указать графический порт окна (Углерод) или окно ID (Какао) и границы области в окне, в котором Вы хотите, чтобы видео было выведено на экран. Этой видео областью является прямоугольная область где-нибудь в предметной области окна; часто предметная область и видео область являются тем же прямоугольником.
DVD Playback Services всегда масштабирует видео для адаптации в видео области, таким образом, важно указать видео область с корректным форматным соотношением. Каждый заголовок на DVD создается для одного из двух видео форматных соотношений: стандарт (4:3 или 1.33) или широкий (16:9 или 1.78). Каждый раз, когда заголовок изменяется, Вы ответственны за изменение форматного соотношения видео области для приспосабливания новому форматному соотношению. Некоторое масштабирование неизбежно, потому что размерности фактического Видео DVD растра не соответствуют ни одному из этих двух форматных соотношений. (Другой образ мыслей об этом - то, что пиксели DVD являются прямоугольными, не квадратными.), Например, растр NTSC для стандартного видео - фактически 720 x 480 пикселей. Для отображения видеовыхода стандарта NTSC, как это предназначается, чтобы быть замеченным необходимо повторно масштабировать видео область горизонтально (640 x 480), вертикально (720 x 540), или оба.
Также необходимо сказать DVD Playback Services, какой дисплей это должно использовать для видеовыхода. Для оптимальной производительности окно должно всегда располагаться на единственный экран. В системах больше чем с одним экраном пользователь может попытаться переместить видеоокно так, чтобы это одновременно покупало и продавало два экрана сразу. Если это происходит, Ваше приложение должно перейти все окно на экран, содержащий самую большую область окна.
Меню и навигация меню
Видео DVD носители обычно содержат одно или более меню, включая меню дисков или главное меню. Меню DVD является экранным меню, представляющим одну или более кнопок и другую визуальную информацию, чтобы помочь пользователю сделать выбор. Кнопки указывают заголовки для игры, настройки или другие меню. Визуальная информация может включать подсветки кнопки и анимированные фоны. Информация должна была вывести на экран эти меню, содержится в носителях сама; никакой Углерод или Какао элементы UI не необходимы. (Важно не перепутать меню DVD с меню приложения, такими как меню Controls в DVD-плеере.)
DVD Plackback Services обеспечивает уровень абстракции, устраняющий сложность отображения и работы меню DVD. Просто необходимо уведомить DVD Playback Services каждый раз, когда пользователь перемещает или щелкает мышью в видеоокне, нажимает клавишу со стрелкой для навигации между кнопками или нажимает клавишу Return или клавишу Enter для активации кнопки. DVD Playback Services обеспечивает ряд функций, которые можно вызвать каждый раз, когда одно из этих событий имеет место. Эти функции документируются в раздел «Menu Navigation» Ссылки Платформы воспроизведения DVD.
Для суммирования DVD Playback Services ответственна за отображение Меню DVD и выполнение его действий. Когда пользователь управляет устройством ввода данных (мышь или клавиатура) для использования меню, Вы ответственны за уведомление DVD Playback Services. Визуальный выбор обратной связи и кнопки в меню обрабатывается для Вас автоматически. Когда пользователь выбирает и активирует кнопку, DVD Playback Services выполняет связанное действие. Действие могло бы быть должно играть заголовок или сцену или ответвление к другому меню.
Аудиовыход
Когда носители DVD играют, DVD Playback Services направляет аудиовыход к внутренним динамикам системы или к внешнему устройству, подключенному к выходному аудиопорту.
Объемом аудиовыхода, испытанным пользователем, управляют две настройки: установка системного тома и установка громкости воспроизведения. Громкость воспроизведения является подмножеством системного тома. DVD Playback Services позволяет Вам устанавливать громкость воспроизведения с помощью целого числа, колеблющегося от 0 до 255, где 255 объем существующей системы. Оба стереоканала используют тот же параметр громкости. DVD Playback Services также позволяет Вам переключать аудиовыход на и прочь; Вы могли использовать эту функцию для реализации аудио бесшумной регулировки.
DVD Playback Services обеспечивает функции, чтобы получить информацию об аудиопотоке, используемом в текущем заголовке, найти другие аудиопотоки и переключиться на различный аудиопоток. Например, Вы могли использовать эти функции для переключения между различными форматами, такими как аудио MPEG и AC 3. Эти функции документируются в раздел «Accessing Audio Streams» Ссылки Платформы воспроизведения DVD.
Закладки
DVD Playback Services обеспечивает способ создать закладки, указывающие позицию носителей во время воспроизведения. Закладка может представлять меню, неподвижное изображение, прошедшее время в заголовке или любое другое расположение в носителях. Закладка является блоком данных, который может быть сохранен в памяти или выписан к файлу. В некоторое более позднее время можно получить закладку и вызвать DVDGotoBookmark
функционируйте, чтобы перейти к указанной позиции в носителях и начать играть.
Можно использовать закладки для реализования многих интересных опций. Например, Вы могли:
Позвольте пользователю создавать закладки к любимым сценам для более позднего воспроизведения.
Сохраните закладку к последнему, играют на позиции в файле и используют эту закладку для возобновления воспроизведения в указанном кадре, когда вновь открываются носители.
Языки
На DVDs, поддерживающем многократные языки, обычно пользователь может выбрать различный язык для звукового канала, подзаголовков и меню с помощью меню выбора языка, создаваемого автором DVD. Вы не должны делать никакого специального программирования для использования в своих интересах этой функции.
При открытии носителей для воспроизведения DVD Playback Services выбирает язык по умолчанию на основе установки языка в панели International Preferences и языки, доступные в носителях. Можно использовать DVD Playback Services, чтобы определить язык, используемый в текущем заголовке или меню, и установить значение по умолчанию в различный язык. Для получения дополнительной информации посмотрите раздел «Accessing Language Codes» в Ссылке Платформы воспроизведения DVD.
Углы камеры
Автор DVD может создать целых девять видеопотоков, представляющих ту же сцену, просматриваемую от различных углов камеры. Основной угол определяется как угол 1. Можно использовать DVD Playback Services, чтобы найти число различных углов в заголовке, и получить или установить текущий угол. Для получения дополнительной информации посмотрите раздел «Accessing Camera Angles» в Ссылке Платформы воспроизведения DVD.
DVD-плеер в качестве примера
CocoaDVDPlayer является проектом в Ссылочной Библиотеке ADC, показывающей, как использовать DVD Playback Services для записи рабочего Видеоплеера DVD. Пользовательский интерфейс CocoaDVDPlayer, показанный на рисунке 1-3, обладает видеоокном и окном контроллера, служащим «дистанционным управлением» для проигрывателя. (Также возможно управлять проигрывателем с клавиатуры.)
Большинство примеров кода в этом руководстве основывается на исходном коде, используемом в CocoaDVDPlayer. Можно счесть полезным загрузить этот проект теперь и следовать вперед как чтение о задачах программирования в следующих двух главах.