Как принять телетекст из SDI в HLS/DASH¶
Телетекст¶
Телетекст — это дополнительные данные (обычно текст, но могут быть и небольшие изображения), которые передаются в телесигнале со спутника. Спутниковое видео попадает на Flussonic Media Server через SDI-карты или сразу в формате MPEG-TS. При приеме потоков с SDI-карты Flussonic определяет наличие телетекста в SDI-источнике и автоматически упаковывает его в поток MPEG-TS без изменений, поэтому дальнейшая обработка телетекста (преобразование в WebVTT или TTML) осуществляется одинаково.
См. также статью об упаковке телетекста для передачи в MPTS/SPTS.
Получение телетекста из SDI¶
Flussonic позволяет читать телетекст различного формата из потоков, захватываемых с SDI-платы. Поддерживаемые форматы телетекста для SDI-источников:
Плата | VBI (SD SDI) | OP-47 (HD SDI) |
---|---|---|
DekTec | ✅ | ✅ |
Decklink | ✅ | ✅ |
Stream Labs | ✅ | ❌ |
Magewell | ❌ | ❌ |
AJA | ❌ | ❌ |
VBI — это данные, расположенные в невидимой области кадра, которая передается во время обратного хода луча по вертикали (т.е. время возвращения в верхнюю часть экрана луча кинескопа в телевизорах с электронно-лучевыми трубками). Практически то же, что и VANC, но VANC более современный формат, используемый для HD SDI и позволяющий передать больше данных в одной линии.
OP-47 — это спецификация телетекста для HD SDI, позволяющая повысить стабильность и бесперебойность передачи телетекста с потоками высокого разрешения. В этом формате в одной линии можно передать еще больше данных, чем в VANC.
Передача телетекста в HLS и DASH¶
Flussonic позволяет передавать телетекст из MPEG-TS:
Для настройки преобразования не требуется дополнительных опций. Если во входном потоке есть телетекст, то Flussonic преобразует его автоматически.
Пример конфигурации (никаких специальных опций):
stream example_stream1 {
input tshttp://EXAMPLE-IP/STREAM_NAME/mpegts;
}
Для проверки наличия dvb_teletext
во входном потоке можно воспользоваться следующей командой:
ffprobe http://EXAMPLE-IP/STREAM_NAME/mpegts
Stream #0:0[0x447]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, bt470bg, top first), 704x576 [SAR 16:11 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:1[0xc12](eng): Audio: mp2 ([4][0][0][0] / 0x0004), 48000 Hz, stereo, fltp, 192 kb/s
Stream #0:2[0x17e2](swe,nor,dan,fin): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006)
После преобразования в выходном HLS потоке выводится телетекст в формате WebVTT:
Передача скрытых субтитров в HLS и DASH¶
Наличие скрытых субтитров в HLS и DASH¶
Чтобы HLS или DASH плееры показывали скрытые субтитры, необходимо сигнализировать об этом в плейлист-файлах или так называемых файлах-манифестах. В этих файлах содержится информация о названиях потоков, их URL, а также информация о разрешении, скрытых субтитрах и т.п. Flussonic может добавить необходимую сигнализацию в HLS и DASH манифесты.
Для этого добавьте следующий параметр рядом с URL потока в конфигурационном файле (/etc/flussonic/flussonic.conf
):
cc.{608|708}.{INSTREAM-ID}.{lang|name}=VALUE
Параметры:
608|708
— стандарт скрытых субтитров. Может принимать всего 2 значения: 608 или 708 для стандартов CEA-608 и CEA-708 соответственно.INSTREAM-ID
— номер канала, в котором содержатся скрытые субтитры. Это целое число от 1 до 4 для CEA-608 и от 1 до 63 для CEA-708.lang
— параметр языка скрытых субтитров (по стандарту ISO 639.2/B)name
— параметр, указывающий на то, под каким именем будет отображаться название языка в плеере.VALUE
— конкретное значение языка. В зависимости от того, указан параметрlang
илиname
, форма записи конкретного значения может отличаться.
В качестве примера давайте разберём как будет выглядеть запись языка скрытых субтитров для английского:
- для
lang
:cc.708.1.lang=eng
(по стандарту ISO 639.2/B), - для
name
:cc.708.1.name=English
(название дорожки, которое будет отображаться в плеере).
Пример использования:
stream example_stream2 {
input tshttp://EXAMPLE-IP/STREAM_NAME/mpegts cc.708.12.lang=fr cc.608.1.lang=eng;
}
В примере выше содержатся 2 дорожки со скрытыми субтитрами:
- 12-ый канал содержит скрытые субтитры стандарта CEA-708 на французском.
- 1-ый канал содержит скрытые субтитры стандарта CEA-608 на английском.
Вы можете проверить наличие скрытых субтитров в DASH и HLS манифестах.
- для DASH это осуществляется с помощью тега
Accessibility
в файле с плейлистом. Для этого Вам необходимо воспользоваться командойcurl
, чтобы сначала загрузить сам плейлист:
curl http://FLUSSONIC-IP/example_stream2/index.mpd
Возвращаясь к примеру выше, информация о скрытых субтитрах потока example_stream2
будет выглядеть следующим образом:
<Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" value="CC1=eng;CC1=eng"/>
<Accessibility schemeIdUri="urn:scte:dash:cc:cea-708:2015" value="12=lang:fr;12=lang:fr"/>
- тот же порядок действий и для HLS. Отличие лишь в формате представления плейлиста:
curl http://FLUSSONIC-IP/example_stream2/index.m3u8
#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS,GROUP-ID="v1cc",LANGUAGE="fr",NAME="fr12",INSTREAM-ID="SERVICE12"
#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS,GROUP-ID="v1cc",LANGUAGE="eng",NAME="eng1",INSTREAM-ID="CC1",AUTOSELECT=YES,DEFAULT=YES
Извлечение и конвертация скрытых субтитров¶
Flussonic позволяет извлекать CEA-608 скрытые субтитры из входного потока MPEG-TS и осуществлять их последующую конвертацию:
- в формате WebVTT — для HLS
- в формате WebVTT и TTML — для DASH.
После операции транскодирования скрытые субтитры сохраняются в выходном потоке.
Чтобы Flussonic осуществил извлечение и конвертацию скрытых субтитров, добавьте параметр cc.extract
к URL-адресу потока.
Для MPEG-TS:
stream example_stream3 {
input tshttp://EXAMPLE-IP/STREAM_NAME/mpegts cc.extract;
}
Опция cc.extract
доступна на источниках MPEG-TS.
Расположение субтитров¶
Для обозначения расположения субтитров на видео настройте параметр
substyle valign=top|middle|bottom align=left|center|right
, например:
stream example_stream5 {
input tshttp://EXAMPLE-IP/STREAM_NAME/mpegts cc.extract;
substyle valign=top align=left;
}
Расположение субтитров можно также задать в UI на вкладке Output в настройках потока:
После преобразования в выходном потоке HLS присутствуют скрытые субтитры в формате WebVTT:
Выбор субтитров для проигрывания по DASH¶
Поскольку в манифест DASH включены два формата субтитров, вы можете выбрать один из них при проигрывании выходного потока:
https://FLUSSONIC-IP/STREAM_NAME/index.mpd?text=wvtt
или
https://FLUSSONIC-IP/STREAM_NAME/index.mpd?text=ttml
(TTML используется по умолчанию)
Передача субтитров в MSS¶
Flussonic передает любой тип субтитров (субтитры, закрытые титры или телетекст) в формате TTML в выходные потоки MSS. Специальной настройки не требуется, единственное требование — входящие потоки должны иметь TTML субтитры.
Для обозначения расположения субтитров на видео используйте опцию
substyle valign=top|middle|bottom align=left|center|right
, например:
stream example_stream6 {
input tshttp://EXAMPLE-IP/STREAM_NAME/mpegts cc.extract;
substyle valign=top align=left;
}
О TTML-субтитрах¶
TTML (Timed Text Markup Language) — это стандарт для субтитров и скрытых субтитров (closed captions), который широко поддерживается плеерами, стриминговыми платформами и другим программным обеспечением, а также используется в телевизионной отрасли. Стандарт TTML имеет богатые возможности для позиционирования, выравнивания, передачи субтитров на нескольких языках и др. Субтитры TTML передаются в виде текстового файла на основе XML с расширением (.ttml) или (.xml).
Flussonic передает TTML-субтитры в MSS и DASH.