Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2023, 21:53   #1
LUN2
Пользователь
 
Регистрация: 14.08.2021
Сообщений: 18
По умолчанию Как работает HTTP Live Streaming (HLS)

Добрый вечер!
Не знаю, насколько в тему именно данного форума - лучше не нашел.
Хочу реализовать простой сервер на С++, поставляющий браузеру видеопоток (типа видеочата)
по технологии "HTTP Live Streaming (HLS)".

Непосредственно сетевые ф-ции отработаны, по захвату видео материал тоже нашел.

Вопрос собственно по процедуре взаимодействия по HLS.

Насколько я ее понял эту технологию:
1) на сервере предварительно видеопоток нарезается на небольшие по времени кусочки (видеофайлы) и формирует файл M3U8 - перечень этих кусочков,

2) клиент делает обычный запрос GET на файл M3U8, представляющий собой список видео (например) файлов с различными разрешениями (т.е. этих кусочков),

3) клиент опять делает GET и скачивает наиболее подходящий файл и проигрывает его.

Вопросы (для случая) трансляции видео стрима, который должен осуществляться непрерывно:

1) а что происходит, когда в шаге3 все видео проиграно ? Клиент опять возвращается на шаг 2 - запрашивает M3U8 ? С каким именем ? Потом опять шаг 3 и до бесконечности,

2) как браузеру сказать, что он должен работать со ссылкой с использованием hls (что-то типа - hls:\\адрес или как-то по-другому) ?

3) то, что я назвал кусочком (т.е. по сути, видеофайл) - в каком формате оно должно быть ?

PS: я с этой темой только знакомлюсь, поэтому если написал что-то не очень вразумительное, прошу не ругаться, а пояснить.
LUN2 вне форума Ответить с цитированием
Старый 05.10.2023, 22:22   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от LUN2 Посмотреть сообщение
1) а что происходит, когда в шаге3 все видео проиграно ? Клиент опять возвращается на шаг 2 - запрашивает M3U8 ? С каким именем ? Потом опять шаг 3 и до бесконечности,
для стрима отдается индекс с последними несколькими кусками, при повторном запросе, естественно, куски будут другие

Цитата:
Сообщение от LUN2 Посмотреть сообщение
2) как браузеру сказать, что он должен работать со ссылкой с использованием hls (что-то типа - hls:\\адрес или как-то по-другому) ?
hls проприетарный эпловский стандарт, просто так его браузер играть не будет, если не на эпле

Цитата:
Сообщение от LUN2 Посмотреть сообщение
3) то, что я назвал кусочком (т.е. по сути, видеофайл) - в каком формате оно должно быть ?
Вы же даже вики не открывали
Цитата:
Encoder: codify video files in H.264 format and audio in AAC, MP3, AC-3 or EC-3.[10] This is encapsulated by MPEG-2 Transport Stream or MPEG-4_Part_14 to carry it.
Цитата:
At WWDC 2016 Apple announced[11] the inclusion of byte-range addressing for fragmented MP4 files, or fMP4, allowing content to be played via HLS without the need to multiplex it into MPEG-2 Transport Stream. The industry considered this as a step towards compatibility between HLS and MPEG-DASH.[12][13]
p51x вне форума Ответить с цитированием
Старый 05.10.2023, 22:42   #3
LUN2
Пользователь
 
Регистрация: 14.08.2021
Сообщений: 18
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
для стрима отдается индекс с последними несколькими кусками, при повторном запросе, естественно, куски будут другие
p51x, спасибо за ответ!
Все же эту часть не понял.
Как должна быть сформирована ссылка на странице ?
Если это ссылка на M3U8 файл, то после проигрывания тех видео, на которые он указывает, как будет запрашиваться новый M3U8 (с тем же именем?) ? В этом у меня вопрос.
Насколько я понимаю, в классическом http инициатива запросов - у клиента, поэтому если он делает GET, то он должен знать имя файла...


PS: wiki открывал, кстати этот кусок, тема для меня новая, возможно недопонял, про формат почитаю еще.
LUN2 вне форума Ответить с цитированием
Старый 05.10.2023, 23:06   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от LUN2 Посмотреть сообщение
Как должна быть сформирована ссылка на странице ?
В формате понятном вашему проигрывателю

Цитата:
Сообщение от LUN2 Посмотреть сообщение
Если это ссылка на M3U8 файл, то после проигрывания тех видео, на которые он указывает, как будет запрашиваться новый M3U8 (с тем же именем?) ? В этом у меня вопрос.
Цитата:
Сообщение от p51x Посмотреть сообщение
для стрима отдается индекс с последними несколькими кусками, при повторном запросе, естественно, куски будут другие
Цитата:
Сообщение от LUN2 Посмотреть сообщение
Насколько я понимаю, в классическом http инициатива запросов - у клиента, поэтому если он делает GET, то он должен знать имя файла...
Код:
<video src="https://devstreaming-cdn.apple.com/videos/streaming/examples/adv_dv_atmos/main.m3u8" controls="" autoplay="" width="960" height="540"></video>
как же он догадается о имени m3u8?..

Начните с офф документации: https://developer.apple.com/streaming/
Или возьмите готовые либы/сдк.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Авторизация на сайте, в HTTP Analyzer работает в программе нет. Человек_Борща Работа с сетью в Delphi 6 06.12.2010 15:40
Streaming Media Server (Player) sSsantasSs Софт 0 13.07.2010 11:00
Не работает http server Дядя Фёдор Работа с сетью в Delphi 2 06.09.2007 12:53