Показать сообщение отдельно
  #3  
Старый 26.03.2015, 04:19
tolyan249 tolyan249 вне форума
Прохожий
 
Регистрация: 27.08.2012
Сообщения: 4
Репутация: 10
По умолчанию

Передаю и принимаю пока без сжатия PCM как сжать в MP3 и расжать обратно на лету в реальном времени в PCM я пока не знаю. Если передаю и принимаю без разбивки и добавления своих байтов то принимаеться все нормально. звук чистый. Или надо какойто алгоритм свой пидумывать или готовые есть. Можно конечно не разбивать буфер, тогда надо указывать его длинну, потому что длинна буфера может быть разная, а тут у меня фиксировано по 124 байта не зависимо от длины буфера. это примерно алгоритм MPЕG2 TC потока. когда пакеты приходят ты уже знаешь от кого пришел пакет из чем. Просто нужно правильно функции написать, разложения и сложения буфера.

Математика нужна считать до байта. Как правильно написать пока не знаю, уже месяц бьюсь пока застрял на одном месте.


Структура потока

В транспортном потоке можно выделить несколько уровней абстракции, иерархическая структура которых напоминает сетевую модель OSI. Например поток, содержащий видео, можно представить следующим образом:
Смесь различных программ.Пакетизированный элементарный поток (Packetized elementary stream, PES)Элементарный поток (Elementary stream, ES)Группа изображений (Group of pictures, GOP) — предоставляет случайный доступ к картинкеОтдельное изображение (кадр)Срез (Slice) — часть кадра, выделенная для предотвращения распространения ошибок квантованияМакроблок — в составе от 6 до 12 DCT блоков.Элементарный блок кодирования (DCT блок) размером 8x8 точек








Важные элементы транспортного потока

Пакет

Пакет, базовая единица транспортного потока.
заголовок начинается с известного Байта Синхронизации (8 бит) 0x47 (0100 0111).
Следующие три битовых флага используются, чтобы указать, как должна быть обработана полезная нагрузка.1. Первый флажок указывает на транспортную ошибку.
2. Второй флажок указывает начало полезной нагрузки (payload_unit_start_indicator). Когда полезная нагрузка Transport Stream пакета содержит данные по PSI, payload_unit_start_indicator имеет значение '1'. Если Transport Stream пакет не содержит данные по PSI, то значение payload_unit_start_indicator будет '0'. Ссылка на разделы 2.4.4.1 и 2.4.4.2 . Это также применяется к приватным потокам с stream_type 5 (ссылка на Таблица 2-29).
3. Третий флажок указывает транспортный приоритетный бит.

флажки сопровождаются Идентификатором Пакета (13 бит) PID. Используется, чтобы однозначно определить поток, которому принадлежит пакет (например, пакеты PES, соответствующие ES), сгенерированный мультиплексором. PID позволяет получателю дифференцировать поток, которому принадлежит каждый полученный пакет. Некоторые значения PID предопределены и используются, чтобы указать различные потоки информации контроля. От пакета с неизвестным PID, который не требуется получателю, просто отказываются. Специфическое значение PID 0x1FFF зарезервировано, чтобы указать, что пакет — нулевой пакет (и должен быть проигнорирован получателем).
два следующих служебных бита используются процедурами условного доступа к зашифрованной полезной нагрузке некоторых пакетов TS.
Два служебных бита поля адаптации, которые могут иметь четыре значения:1. 01 — без поля адаптации (adaptation_field), только полезная нагрузка (payload_data)
2. 10 — только поля адаптации (adaptation_field), без полезной нагрузки (payload_data)
3. 11 — поля адаптации (adaptation_field) и далее следует полезная нагрузка (payload_data)
4. 00 — ЗАРЕЗЕРВИРОВАННЫЙ ISO/IEC для будущего использования

Наконец есть Счетчик Непрерывности (4 бита)

Остальная часть пакета состоит из полезной информации. Пакеты составляют 188 байт в длине, но среда коммуникации может добавить некоторые байты для устранения ошибок пакета. DVB-ASI использует 204 байта и 208 байтов ATSC как транспортный пакет потока. (DVB t=8 и ATSC t=10 то есть дополнительные байты = 2*t). Передача ATSC добавляет 20 байтов Reed-Solomon передовое устранение ошибок, чтобы создать пакет, который является 208 байтов длиной. 188-байтовый размер пакета был первоначально выбран для совместимости с системами ATM.

PID

Каждая таблица или элементарный поток в транспортном потоке идентифицируется по 13-битовому PID. Демультиплексор извлекает элементарные потоки из общего транспортного потока, объединяя их в потоки с одинаковыми PID. В большинстве приложений планируется использовать временно́е мультиплексирование, чтобы решать, как часто конкретный PID будет появляться в транспортном потоке.

Programs

Транспортный поток имеет концепцию программы. Единая программа Program Map Table (PMT), которая имеет уникальный PID, и элементарные потоки, связанные с этой программой и имеющие свои PID-ы, которые перечислены в PMT. Например, транспортный поток, используемый в цифровом телевидении может состоять из трех программ, и нести в себе три телевизионных канала. Предположим, каждый канал состоит из одного видео потока и одного или двух аудио потока, и любые необходимые метаданные. Приемник, желающий декодировать один из каналов использует для декодирования лишь PID-ы нужные для данного канала, которые связаны с его программой. Он может отказаться от содержащихся в ней всех других PID-ов.

Program Specific Information (PSI)

Специальная информация о программах
Program Association Table (PAT),
Program Map Table (PMT),
Conditional Access Table (CAT),
Network Information Table (NIT).

В спецификации MPEG-2 формат CAT и NIT не регламентирован.

PAT

Таблица программ (Program Association Table, PAT) содержит PID-ы всех PMT. Её собственный PID всегда 0x0.

PMT

Таблица структуры программ (Program Map Table, PMT) содержит PIDы и основные характеристики элементарных потоков конкретной программы — видео, звука, дополнительных данных. Для каждой программы есть свой PMT с собственным PID. Кроме того PMT содержит сообщения EMC системы условного доступа, если в программе присутствуют зашифрованные элементарные потоки.

PCR

Чтобы декодер мог воспроизводить программы в правильное время, на правильной скорости и с синхронизацией, обычно программы периодически передают Program Clock Reference, или PCR, в одном из потоков программы. Это так же называется основной источник опорной частоты (Master Clock). Временные интервалы в MPEG2 рассчитываются по этой частоте. Для примера, временная метка представления (PTS) соответствует PCR. Первые 33-бита соответствуют опорной частоте в 90 кГц. Расширение последовательности на 9 бит соответствует частоте в 27 МГц.

Null packets

Некоторые протоколы передачи, такие как в стандартах ATSC и DVB, жестко ограничены требованиями к бит-рейту транспортного потока. Таким образом, чтобы поток данных поддерживал постоянную жестко заданную скорость передачи, Multiplexer должен иметь возможность добавлять в поток дополнительные пакеты. Пакеты с PID 0x1FFF как раз служат для этих целей. Поле полезной нагрузки этих пакетов не содержит какой-либо полезной информации, таким образом ресивер получая такой пакет игнорирует его содержимое.

Модификация в транспортном потоке, спецификация случайного доступа к медиа (M2TS)

Timecode

Транспортный поток был создан для кассет и вещания, поэтому потребовались изменения для использования в медиаустройствах со случайным доступом, таких как новое поколение цифровых камер, записывающих на DVD, Blu-ray, жесткие диски или SSD, карты памяти.

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

Пакеты записываются не по порядку. Специальный трек хранит их 4-байтный код времени (timecode — TC), добавленный в стандартные 188-байтные пакеты. В результате получается 192-байтный пакет. Все это неофициально называется M2TS потоком. Blu-ray Disc Association назвала это «BDAV MPEG-2 transport stream». JVC назвала TOD (возможно, как аббревиатура от «Transport stream on disc») когда использовала его в видекамерах с HDD, таких как GZ-HD7. Транспортный поток M2TS также используется для AVCHD видеофайлов, которые часто имеют расширение MTS.


Спасибо.
Ответить с цитированием