MPEG-TS-Codierung

9

Ich habe eine Datei, die ich in MPEG-TS konvertieren muss, damit sie die folgende Spezifikation erfüllt:

Elementary Stream Bitrate [kbit / s] Video: 2575 Audio: 2 x 192 Untertitel: - PAT / PMT: - Füllung: -

Komponente TS Bitrate [kbit / s] Video: 2652 Audio: 395 Untertitel: 45 PAT / PMT: 45 Füllung: 62 Gesamt: 3200 CBR

Zusätzliche erforderliche Komponenten: KLOPFEN PMT Nullpakete

Komponenten, die möglicherweise angezeigt werden: NIT, SDT, EIT, etc.

%Vor%

Nach der Codierung mit dem obigen Skript scheint alles in Ordnung zu sein (für Video und Audio ist die Bitrate konstant) abgesehen von zwei Dingen: Die Bitrate des Containers sollte ebenfalls CBR bleiben, aber das ist nicht der Fall. Außerdem fehlt die Komponente stuffing (0x1 ffff) - null. Ist es möglich, das Skript so zu korrigieren, dass sowohl das Nullpaket als auch die Bitrate des Containers konstant sind (3,2 Mbps CBR)?

Die zweite Option ist die Kodierung mit ffmpeg:

%Vor%

aber, wie SDT-Tabelle zu deaktivieren / deaktivieren / entfernen?

    
adismsc 25.11.2011, 13:39
quelle

1 Antwort

5

Da Ihnen das Konzept der NULL-Pakete bekannt ist, haben Sie möglicherweise in diesem Bereich mit kommerzieller Software oder Hardware gearbeitet.

Es gibt einen Unterschied zwischen CBR (Video) und Systemrate (oder Multiplexerrate). Wenn Video als CBR codiert ist, sagen wir bei 3,2 Mbps, ist es durchaus in Ordnung, dass es um einige Hundert kbps um diesen Rand schwankt. Also Peak-Bitrate, könnte 3,3 Mbps sagen. Das ist ganz in Ordnung. Wenn Sie weitere 100 kbps Audio hinzufügen, beträgt die maximale Bitrate 3,4. Normalerweise würde man in diesem Fall die Systemrate über 3,6 Mbps oder mehr setzen; wo Gleichgewicht sind NULL-Pakete.

Die Systemrate 3.5 Mbps CAN NOT schwankt überhaupt. Wenn dies der Fall ist, funktioniert die PCR-basierte Synchronisation nicht und im Grunde funktionieren die Dinge nicht in einer Live-Umgebung. Im Grunde genommen kann man sich 3.5 Mbps vorstellen (ungefähr 240 Pakete in 100 Millisekunden), die man sich als BUS vorstellen kann. Jeder Sitz muss gefüllt sein, um einen kontinuierlichen Transport zu gewährleisten. Normalerweise wird so vorgegangen, dass wenige Plätze leer bleiben.

Der traurige Teil ist, dass weder VLC noch irgendein anderes Tool in Open Source dies für Sie tun wird.

Der Hack, den wir benutzten, war, dass wir einen solchen VLC erzeugten Stream über IP senden (wo TS-Streams ohne NULL-Pakete gesendet werden) - und das über die Ausgabe von einem Muxer mit ASI oder einer solchen Schnittstelle bekommen habe muxer hinzugefügt.

Alternativ können Sie Manzanita muxer verwenden, um Ihren Nicht-Null-TS-Stream zu konvertieren richtiger TS-Stream.

BEARBEITEN:
Basierend auf dem Kommentar - wenn Sie nur SDT deaktivieren müssen - müssen Sie zwei Dinge tun.

  1. Entfernen Sie alle Pakete von der PID, die der SDT-Tabelle entspricht. Wenn Sie nicht vollständig demuxen und neu muxen - ein schneller Weg, dies zu tun, könnte sein, die 13-Bit-PID-Nummer durch eine NULL-Paket-PID-Nummer neu zu stempeln.

  2. Entfernen Sie den Bezug des SDT-PID-Werts in der PAT-Tabelle. Dies bedeutet im Wesentlichen, dass Sie 3 bis 4 Pakete erzeugen, die korrigiert PAT sind; und ersetze alle PAT-Paketsequenzen in dem Strom durch diese korrigierten Pakete.

Dipan Mehta 27.11.2011 17:56
quelle