Потоковая передача H.264 в пакетах на Apple Tv на C#

В настоящее время я пытаюсь создать приложение на С# для взаимодействия с моим Apple TV.

Следующая ссылка — это протокол AirPlay, который использует Apple TV (неофициально): http://nto.github.io/AirPlay.html

Начиная с верхней части документа, мне удалось заставить мое приложение успешно отправлять фото/слайд-шоу/видео на AppleTV, используя HTTP-запросы туда и обратно.

Тем не менее, я согласен с частью документа о зеркалировании. Согласно (неофициальному) протоколу, клиент подключается к Apple TV через порт 7100 и отправляет типичный HTTP-запрос POST, за которым следует двоичный PLIST параметров сеанса. У меня нет проблем с этой частью. Я немного в тупике относительно того, что делать в следующей части из-за отсутствия опыта.

После отправки начального HTTP-заголовка Apple TV ожидает пакетный поток H.264, об этом я совершенно не знаю, особенно потому, что я понятия не имею о структурах полезной нагрузки/NAL с этим типом потока и о том, как создавать эти байты. массивы, чтобы придерживаться протокола (в основном потому, что я когда-либо имел дело только с вашими типичными типами данных.

Мой главный вопрос: как мне настроить правильные значения для отправки, чтобы придерживаться следующего:

6.2. Потоковые пакеты

Видеопоток пакетируется с использованием 128-байтовых заголовков, за которыми следует необязательная полезная нагрузка. Кажется, что используются только первые 64 байта заголовков. Заголовки начинаются со следующих полей с прямым порядком байтов:

размер описание
4 байта размер полезной нагрузки
2 байта тип полезной нагрузки
2 байта 0x1e, если тип = 2, иначе 6
8 байт отметка времени NTP
Существует 3 типа пакетов:

описание типа
0 битовый поток видео
1 данные кодека
2 пульс

Любая помощь, направляющая меня в правильном направлении, будет очень признательна, поскольку я чувствую, что ударился о кирпичную стену.


person user1411499    schedule 28.05.2014    source источник


Ответы (1)


Похоже на пользовательский формат заголовка. Обычно существует 2 формата, в которых передается H.264, как описано здесь:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd757808%28v=vs.85%29.aspx Либо он состоит из последовательности блоков уровня сетевой абстракции (NALU), каждый из которых имеет префикс стартовый код равен 0x000001 или 0x00000001

OR

каждому NALU предшествует поле длины, которое дает длину NALU в байтах. Размер поля длины может варьироваться, но обычно составляет 1, 2 или 4 байта.

Загрузите спецификацию H.264 здесь: http://www.itu.int/rec/T-REC-H.264-201304-S

person Grant    schedule 29.05.2014