Рейтинг@Mail.ru

Наши друзья и партнеры

UnixForum
купить дешевый 
компьютер родом из Dhgate.com




Библиотека сайта rus-linux.net

Фреймворк GStreamer. Руководство разработчика плагинов. Типы и свойства потоков данных

Оригинал: GStreamer Plugin Writer's Guide
Авторы: Richard John Boulton, Erik Walthinsen, Steve Baker, Leif Johnson, Ronald S. Bultje, Stefan Kost, Tim-Philipp Muller, Wim Taymans
Дата публикации: 19 июля 2014 г.
Перевод: А.Панин
Дата перевода: 28 июля 2014 г.

Глава 16. Типы и свойства потоков данных

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

Для того, чтобы типы потоков данных могли успешно использоваться, а также для того, чтобы с ними работали такие системы, как система автоматической подгрузки плагинов, чрезвычайно важно, чтобы все элементы достигли соглашения об используемых описаниях типов потоков данных, а также о том, какие свойства требуются для описания каждого из типов. Фреймворк GStreamer просто предоставляет возможность описания типов потоков данных и их параметров, но не ограничивает назначение этих типов и параметров, а также не устанавливает стандартов, описывающих правила создания новых типов потоков данных. Такие вещи должны устанавливаться на уровне политик создания типов потоков данных, а не ограничиваться средствами технических систем.

Политика создания типов потоков данных на текущий момент достаточно проста:
  • Не создавайте новый тип потока данных в том случае, если вы можете использовать один из уже существующих типов.
  • В случае создания нового типа потока данных следует в первую очередь обсудить его с другими разработчиками фреймворка GStreamer, воспользовавшись как минимум одним из перечисленных средств связи: IRC, списки рассылки.
  • Попытайтесь достичь минимальной вероятности конфликта обозначения нового типа потока данных с обозначения уже созданных типов, а также чрезмерного обобщения. Например: тип потока данных "audio/compressed" будет слишком обобщенным для представления аудиопотока, сжатого с помощью кодека mp3. Вместо него может быть использован подходящий тип "audio/mp3", хотя тип "audio/compressed" также имеет право на существование в том случае, если имеется свойство с помощью которого указывается тип используемого алгоритма сжатия.
  • Убедитесь в том, что при создании нового типа потока данных вы четко описываете этот тип и добавляете его в список известных типов потоков данных для того, чтобы другие разработчики могли правильно использовать его при реализации собственных элементов.

16.1. Создание простого формата потока данных для тестирования

Если вам потребуется создать новый формат мультимедийных данных, который не был ранее описан в Списке объявленных типов потоков данных, вам придется ознакомиться с некоторыми общими правилами именования типов потоков данных, описания их свойств, а также другими правилами. Тип мультимедийных данных в идеальном случае должен быть эквивалентен типу MIME, описанному организацией IANA; в случае отсутствия существующего типа он должен быть записан в форме type/x-name, где строка type обозначает тип данных, передающихся в рассматриваемом потоке (audio, video, ...), а name является специфичным для данного типа мультимедийного потока именем. Типы мультимедийных данных, представляющие аудио- и видеоданные, должны по возможности поддерживать стандартные свойства аудио/видео (обратитесь к списку для ознакомления с подробностями), а также могут использовать свои собственные свойства. Для получения общего представления о том, какие свойства мы считаем полезными, обратитесь (снова) к упомянутому списку.

Потратьте ваше время на формирование корректного набора свойств для вашего нового типа данных. Не следует торопиться. Также неплохой идеей является проведение экспериментов со свойствами. Основываясь на опыте, можно сказать, что в теории новые типы данных могут казаться полезными, но в любом случае, необходимо использовать их на практике для того, чтобы убедиться в том, что они выполняют свои задачи. Убедитесь в том, что имена ваших свойств не конфликтуют с именами аналогичных свойств других типов потоков данных. В том случае, если они совпадают, убедитесь в том, что они предназначены для изменения одного и того же параметра; свойства, связанные с различными типами параметров и имеющие одинаковые имена не должны использоваться.

16.2. Функции определения типов потоков данных и механизм автоматической подгрузки плагинов

Всего лишь объявив типы потоков данных, мы не достигнем поставленной цели. Для того, чтобы произвольные данные из файлов идентифицировались и проигрывались, нам понадобится надежный механизм распознавания их типа. Для этой цели была предложена концепция "определения типов потоков данных" ("typefinding"). Процесс определения типа потока данных заключается в исследовании данных мультимедийного потока и определении его типа. Он включает два отдельных этапа: на первом этапе может использоваться неограниченное число функций, которые мы называем функциями определения типа потока данных, имеющих возможность идентифицировать один или несколько типов потоков данных путем исследования входного байтового потока. После этого на втором этапе используется небольшой механизм, который выполняет регистрацию и вызов каждой их этих функций. Так работает ядро системы определения типов потоков данных. На основе этого ядра может быть разработана система автоматической подгрузки плагинов, которая будет использовать описанную систему идентификации типов потоков данных для автоматического формирования конвейера, предназначенного для обработки входного потока данных. В данном разделе мы сфокусируем свое внимание исключительно на функциях определения типов потоков данных.

Функция определения типа потока данных обычно реализуется в файле gst-plugins-base/gst/typefind/gsttypefindfunctions.c за исключением тех случаев, когда когда существуют веские причины (такие, как зависимости библиотек) для размещения ее в другом файле. Причина такой централизации состоит в стремлении к сокращению количества плагинов, которые должны быть загружены для идентификации типа потока данных. Ниже приведен пример кода для распознавания файлов формата AVI, в начале которых располагается тэг "RIFF", после которого указывается размер файла и располагается следующий тэг "AVI":

Обратите внимание на то, что в файле gst-plugins/gst/typefind/gsttypefindfunctions.c реализованы вспомогательные макросы для сокращения объема кода. Постарайтесь интенсивно использовать их в том случае, если планируете передавать разработчикам патчи с новыми функциями определения типов потоков данных.

Механизм автоматической подгрузки плагинов был подробно описан в Руководстве разработчика приложений на основе фреймворка GStreamer.

16.3. Список объявленных типов потоков данных

Ниже приведен список всех типов потоков данных, объявленных в рамках фреймворка GStreamer. Список разделен на отдельные таблицы с описаниями типов, соответствующих аудиопотокам, видеопотокам, потокам данных субтитров и других типов потоков данных с целью улучшения читаемости. Под каждой таблицей может находиться список примечаний, относящихся к информации из этой таблицы. При описании каждого из типов потоков данных мы пытаемся настолько, насколько это возможно, использовать типы и следовать установленным организацией IANA правилам.

Обратите внимание на то, что многие свойства являются не обязательными, а дополнительными. Это значит, что большая часть значений этих свойств может быть получена из заголовка контейнерного мультимедийного потока, но в том случае, если заголовок не содержит значений этих свойств, они также могут быть извлечены путем разбора заголовка самого элементарного мультимедийного потока. Политика разработки элементов устанавливает необходимость предоставления элементом информации, полученной исключительно путем разбора своего собственного потока данных, а не потока данных другого элемента. Пример: заголовок контейнерного мультимедийного потока данных формата AVI предоставляет информацию о частоте дискретизации содержащегося в нем аудиопотока. Системные потоки формата MPEG не предоставляют такой информации. Это значит, что демультиплексор потока данных формата AVI должен предоставлять значение частоты дискретизации аудиопотоков формата MPEG в качестве значения свойства, связанного с аудиопотоками формата MPEG, а демультиплексор потока данных формата MPEG - не должен. Декодер, которому требуются эти данные, должен будет установить элемент для разбора потока данных между двумя описанными элементами с целью извлечения необходимых данных из заголовка потока данных или их расчета на основе параметров потока данных.

Таблица 16.1. Таблица типов аудиопотоков

Тип мультимедийного потока Описание Свойство Тип значения свойства Значения свойства Описание свойства
Все типы аудиопотоков
audio/* Все типы аудиопотоков. rate целочисленное (integer) больше 0 Частота дискретизации потока аудиоданных в сэмплах (на канал) в секунду.
channels целочисленное (integer) больше 0 Число каналов потока аудиоданных.
channel-mask битовая маска   Позиционирование имеющихся каналов. Обратитесь к описанию типа "GstAudioChannelPosition". Значение 0 обозначает отсутствие позиционирования.
format строковое (string) S8 U8 S16LE S16BE U16LE U16BE S24_32LE S24_32BE U24_32LE U24_32BE S32LE S32BE U32LE U32BE S24LE S24BE U24LE U24BE S20LE S20BE U20LE U20BE S18LE S18BE U18LE U18BE F32LE F32BE F64LE F64BE Формат данных сэмплов.
layout строковое (string) "interleaved" или "non-interleaved" Размещение каналов в буфере.
Все типы несжатых аудиопотоков.
audio/x-raw Неструктурированные и несжатые аудиоданные.       Все свойства (кроме channel-mask в случае моно- и стереопотоков) являются обязательными.
Все типы закодированных аудиопотоков.
audio/x-ac3 Аудиопотоки форматов AC-3 и A52.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-adpcm Аудиопотоки формата ADPCM. layout строковое (string) "quicktime", "dvi", "microsoft" или "4xm" Свойство описывает метод упаковки сэмплов в потоке. В формате ADPCM в большинстве случаев производится объединение множества сэмплов для канала. Количество этих сэмплов изменяется в зависимости от формата. В будущем мы планируем избавиться от этого свойства и использовать более понятное свойство, но на данный момент оно существует.
block_align целочисленное (integer) любые Размер буфера для фрагментов потока.
audio/x-cinepack Аудиопотоки формата Cinepack (Quicktime).       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-dv Аудиопотоки формата Digital Video.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-flac Аудиопотоки, сжатые с помощью кодека FLAC (Free Lossless Audio codec).       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-gsm Аудиопотоки, сжатые с помощью кодека GSM.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-alaw Аудиопотоки, сжатые с помощью кодека A-Law.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-mulaw Аудиопотоки, сжатые с помощью кодека Mu-Law.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-mace Аудиопотоки формата MACE (используются в Quicktime). maceversion целочисленное (integer) 3 или 6 Версия аудиокодека MACE, используемого для кодирования аудиопотока.
audio/mpeg Аудиоданные, сжатые с использованием схемы кодирования MPEG. mpegversion целочисленное (integer) 1, 2 или 4 Версия схемы MPEG, используемой для кодирования данных. Значение 1 соответствует MPEG-1, -2 и -2.5 layer 1, 2 или 3. Значения 2 и 4 соответствуют схемам кодирования аудиоданных MPEG-AAC.
framed логическое (boolean) 0 или 1 Значение true указывает на то, что каждый буфер содержит именно один фрейм. Значение false указывает на то, что фреймы и буферы не обязательно совпадают.
layer целочисленное (integer) 1, 2 или 3 Уровень схемы компрессии, используемый для сжатия данных (только в том случае, если mpegversion=1).
bitrate целочисленное (integer) больше 0 Скорость потока в битах в секунду. Для потоков данных формата MPEG с непостоянной скоростью (VBR) это средняя скорость потока.
audio/x-qdm2 Аудиопотоки, закодированные с помощью кодека QDM версии 2.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-pn-realaudio Аудиопотоки формата Realmedia. raversion целочисленное (integer) 1 или 2 Версия кодека Real Audio, использованного для кодирования потока данных. Значение 1 соответствует потоку формата 14k4, 2 - 28k8.
audio/x-speex Аудиопотоки, сжатые с помощью кодека Speex.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-vorbis Аудиопотоки, сжатые с помощью кодека Vorbis.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-wma Аудиопотоки, сжатые с помощью кодека Windows Media Audio. wmaversion целочисленное (integer) 1, 2 или 3 Версия кодека WMA, использованного для кодирования потока данных.
audio/x-paris Аудиопотоки формата Ensoniq PARIS.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-svx Аудиопотоки формата Amiga IFF / SVX8 / SV16.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-nist Аудиопотоки формата Sphere NIST.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-voc Аудиопотоки формата Sound Blaster VOC.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-ircam Аудиопотоки формата Berkley/IRCAM/CARL.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-w64 Аудиопотоки формата Sonic Foundry 64 bit RIFF/WAV.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.

Таблица 16.1. Таблица типов видеопотоков

Тип мультимедийного потока Описание Свойство Тип значения свойства Значения свойства Описание свойства
Все типы видеопотоков.
video/* Все типы видеопотоков. width целочисленное (integer) больше 0 Ширина изображения.
height целочисленное (integer) больше 0 Высота изображения.
framerate дробное (fraction) больше или равно 0; стандартное значение 0/1 Частота кадров (средняя) в кадрах с секунду. Учтите, что наличие данного свойства никак не гарантирует, что реальная частота кадров будет близка к указанному значению. В том случае, если вам необходимо работать с фиксированной частотой кадров, используйте элемент, позволяющий установить ее (такой, как "videorate"). Значение 0/1 обозначает переменную частоту кадров.
max-framerate дробное (fraction) больше или равно 0; стандартное значение такое же, как и у свойства framerate Максимальная ожидаемая частота кадров для материалов с переменной частотой кадров. Значение является корректным только в том случае, если значение свойства framerate равно 0/1.
views целочисленное (integer) больше 0; стандартное значение 1 Количество точек обзора для видео с множеством точек обзора. Каждый буфер данных должен содержать множество буферов типа "GstVideoMeta", описывающих каждую из точек обзора. Используйте идентификатор кадра для доступа к различным точкам обзора.
interlace-mode строковое (string) progressive, interleaved, mixed, fields; стандартное значение progressive Режим чересстрочности. Дополнительные флаги буфера данных описывают параметры кадра и полей.
chroma-site строковое (string) jpeg, mpeg2, dv; стандартное значение UNKNOWN Схема распределения данных цветности в кадрах видео.
colorimetry строковое (string) bt601, bt709, smpte240m; стандартное значение UNKNOWN Схема данных цветности кадров видео.
pixel-aspect-ratio дробное (fraction) больше 0; стандартное значение 1/1 Соотношение сторон пикселей кадров видео.
format строковое (string) I420 YV12 YUY2 UYVY AYUV RGBx BGRx xRGB xBGR RGBA BGRA ARGB ABGR RGB BGR Y41B Y42B YVYU Y444 v210 v216 NV12 NV21 GRAY8 GRAY16_BE GRAY16_LE v308 RGB16 BGR16 RGB15 BGR15 UYVP A420 RGB8P YUV9 YVU9 IYU1 ARGB64 AYUV64 r210 I420_10LE I420_10BE I422_10LE I422_10BE Формат видео. Обратитесь к сайту с описанием значений FourCC для ознакомления с соответствиями и описаниями форматов. В форматах YUY2, YVYU и UYVY пиксели упаковываются по схеме 4:2:2, в Y41P - по схеме 4:1:1 и в IYU2 - по схеме 4:4:4. Планарная упаковка используется в форматах Y42B по схеме 4:2:2, в YV12 и I420 - по схеме 4:2:0, в Y41B - по схеме 4:1:1 и в YUV9 и YVU9 - по схеме 4:1:0. Формат Y800 поддерживает только сэмплы Y (черные/белые пиксели).
Все типы несжатых видеопотоков.
video/x-raw Неструктурированные и несжатые видеоданные.       Обязательными являются свойства, описывающие ширину кадра (width), высоту кадра (height) и формат видео (format).
Все типы закодированных видеопотоков.
video/x-3ivx Видеопотоки формата 3ivx.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
video/x-divx Видеопотоки формата DivX. divxversion целочисленное (integer) 3, 4 или 5 Версия кодека DivX, использованного для кодирования видеопотока.
video/x-dv Видеопотоки формата Digital Video. systemstream логическое (boolean) FALSE Указывает на то, что данный поток не является системным контейнерным мультимедийным потоком.
video/x-ffv Видеопотоки формата FFMpeg. ffvversion целочисленное (integer) 1 Версия кодека FFMpeg, использованного для кодирования видеопотока.
video/x-h263 Видеопотоки формата H-263. variant строковое (string) itu, lead, microsoft, vdolive, vivo, xirlink Специфичный для производителя кодека вариант формата. Формат 'itu' является стандартом.
h263version строковое (string) h263, h263p, h263pp Расширенные версии кодека h263.
video/x-h264 Видеопотоки формата H-264. variant строковое (string) itu, videosoft Специфичный для производителя вариант формата. Формат 'itu' является стандартом.
video/x-huffyuv Видеопотоки формата Huffyuv.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
video/x-indeo Видеопотоки формата Indeo. indeoversion целочисленное (integer) 3 Версия кодека Indeo, использованного для кодирования видеопотока.
video/x-intel-h263 Видеопотоки формата H-263. variant строковое (string) intel Специфичный для производителя вариант формата.
video/x-jpeg Видеопотоки формата Motion-JPEG.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств. Обратите внимание на то, что тип потока video/x-jpeg относится только к видеопотокам формата Motion-JPEG (использующим цветовое пространство YUV). Изображения формата JPEG, использующие цветовое пространство RGB, обозначаются с помощью типа потока image/jpeg (изображение JPEG).
video/mpeg Видеопотоки формата MPEG. mpegversion целочисленное (integer) 1, 2 или 4 Версия кодека MPEG, использованного для кодирования ведеопотока. Обратите внимание на то, что определены различные типы ведеопотоков для таких форматов, как 3ivx, XviD, DivX и "стандартизированного" организацией ISO формата MPEG-4. Это не очень хорошо и мы знаем об этом. Однако, на данный момент мы не можем предложить решения описанной проблемы.
systemstream логическое (boolean) FALSE Указывает на то, что данный поток не является системным контейнерным мультимедийным потоком.
video/x-msmpeg Видеопотоки, закодированные с использованием вариантов кодеков MPEG-4 от компании Microsoft. msmpegversion целочисленное (integer) 41, 42 или 43 Версия аналогичного кодеку MS-MPEG-4 кодека, использованного для кодирования видеопотока. Значение 41 соответствует кодеку MS MPEG версии 4.1, 42 - 4.2, 43 - 4.3.
video/x-msvideocodec Видеопотоки, закодированные с использованием кодека Video 1 (более старого) от компании Microsoft. msvideoversion целочисленное (integer) 1 Версия кодека - свойство всегда имеет значение 1.
video/x-pn-realvideo Видеопотоки формата Realmedia. rmversion целочисленное (integer) 1, 2 или 3 Версия кодека Real Video, с помощью которого был закодирован видеопоток.
video/x-rle Потоки анимации формата RLE. layout строковое (string) "microsoft" или "quicktime" Потоки данных формата RLE в контейнере Microsoft AVI используют схему размещения байт, отличную от потоков формата RLE в контейнере Apple Quicktime; данное свойство позволяет отслеживать эту схему.
depth целочисленное (integer) от 1 до 64 Битность используемой палитры. Палитра, используемая потоками этого типа, описывает 2^depth цветов.
palette_data буфер (GstBuffer)   Буфер, содержащий цвета палитры (в формате RGBA с стандартным для системы размещением байт), используемой потоком. Имеет размер 4*2^depth.
video/x-svq Видеопотоки формата Sorensen Video. svqversion целочисленное (integer) 1 или 3 Версия кодека Sorensen, с помощью которого был закодирован видеопоток.
video/x-tarkin Видеопотоки формата Tarkin.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
video/x-theora Видеопотоки формата Theora.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
video/x-vp3 Видеопотоки формата VP-3.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств. Обратите внимание на то, что мы объявляем разные типы потоков для форматов VP-3 и Theora, что не всегда является хорошей идеей. Скорее всего, эта недоработка будет устранена в будущем.
video/x-wmv Видеопотоки формата Windows Media Video. wmvversion целочисленное (integer) 1, 2 или 3 Версия кодека WMV, с помощью которого был закодирован видеопоток.
video/x-xvid Видеопотоки формата XviD.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
Все типы изображений.
image/gif Формат для обмена изображениями (Graphics Interchange Format).       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
image/jpeg Формат изображений от Joint Photographic Experts Group (Joint Picture Expert Group Image).       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств. Обратите внимание на то, что тип потока image/jpeg соответствует только изображениям формата JPEG с цветовым пространством RGB; изображения формата JPEG с цветовым пространством YUY2 используют тип потока video/x-jpeg ("Motion JPEG").
image/png Переносимый формат сетевых изображений (Portable Network Graphics Image).       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
image/tiff Тэговый формат файлов изображений (Tagged Image File Format).       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.

Таблица 16.3. Таблица типов контейнерных мультимедийных потоков

Тип мультимедийного потока Описание Свойство Тип значения свойства Значения свойства Описание свойства
video/x-ms-asf Контейнерный мультимедийный поток формата ASF (Advanced Streaming Format).       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
video/x-msvideo Контейнерный мультимедийный поток формата AVI.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
video/x-dv Контейнерный системный мультимедийный поток формата Digital Video. systemstream логический (boolean) TRUE Указывает на то, что поток является контейнерным системным мультимедийным потоком, а не элементарным видеопотоком.
video/x-matroska Контейнерный мультимедийный поток формата Matroska.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
video/mpeg Контейнерный системный мультимедийный поток формата MPEG (Motion Pictures Expert Group System Stream). systemstream логический (boolean) TRUE Указывает на то, что поток является контейнерным системным мультимедийным потоком, а не элементарным видеопотоком.
application/ogg Контейнерный мультимедийный поток формата Ogg.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
video/quicktime Контейнерный мультимедийный поток формата Quicktime.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
application/vnd.rn-realmedia Контейнерный мультимедийный поток формата RealMedia.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.
audio/x-wav Контейнерный мультимедийный поток формата WAV.       На данный момент для этого типа потока данных не объявлено и не требуется специфичных свойств.

Таблица 16.4. Таблица типов потоков данных субтитров

Тип мультимедийного потока Описание Свойство Тип значения свойства Значения свойства Описание свойства
           Пока ничего не определено

Таблица 16.5. Таблица других типов потоков данных

Тип мультимедийного потока Описание Свойство Тип значения свойства Значения свойства Описание свойства
           Пока ничего не определено

Следующий раздел : Перемещение в мультимедийном потоке, навигация и другие действия.

Если вам понравилась статья, поделитесь ею с друзьями: