Skip to content

Как принять телетекст из 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:

  • В HLS — телетекст в формате WebVTT
  • в DASH — телетекст в формате WebVTT и TTML.

Для настройки преобразования не требуется дополнительных опций. Если во входном потоке есть телетекст, то 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:

Flussonic teletext

Передача скрытых субтитров в 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 дорожки со скрытыми субтитрами:

  1. 12-ый канал содержит скрытые субтитры стандарта CEA-708 на французском.
  2. 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 в настройках потока:

Flussonic closed captions

После преобразования в выходном потоке HLS присутствуют скрытые субтитры в формате WebVTT:

Flussonic closed captions

Выбор субтитров для проигрывания по 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.