Title: H.261/H.263
1Multimediadatenformate
- H263 / H261 und alles was dazugehört.
2Inhalt
- H.263/H.261 Geschichte und Allgemeines.
- H.263 Struktur.
- H.263 Kodieren eines Frames.
- H.263 INTER-Kodierung / Motion Comp.
- H.263 Was noch alles (MPEG4?).
- H.323 H.263 da wo es hingehört.
3Geschichte
- Beide Standards wurden von der ITU (International
Telecommunication Union) entwickelt. - Die ITU ist eine Organisation die in Genf sitzt
und zu der United Nations System of
Organizations gehört. - Die Entwicklung von H.261 begann bereits 1988 und
wurde dann im März 1993 von der WTSC abgesegnet. - Die Entwicklung für H.263 läuft seit 1993
(Anhänge bis H). H.263 seit 1997 (Anhänge bis
T). Aktuell ist H.263 seit 2000 (Anhänge
U,V,W). In Arbeit Anhang X (2001).
4Übersicht über H.26X
- Beide Spezifikationen sind für Videokonferenz-appl
ikationen gedacht 40kbit/s bis 2 Mbit/s. - Kodierung und Dekodierung muss in Echtzeit
erfolgen, meist nur geringe Bandbreite verfügbar. - Externe Steuerung durch weitere Protokolle
(H.245). - Bildformat
- Verwendete optionen.
- Standard beschränkt die verfügbaren Bildformate.
- Kodierung erfolgt ähnlich wie MPEG.
- IST KEIN DATEIFORMAT !!!
5H.261
- Für Videokonferenzen über ISDN Leitungen gedacht.
- Zwei Formate CIF(352x288) und QCIF(176x144)
- Bilddaten werden mit voller Luminance (Y) und
halber Chrominance (CB und CR) verarbeitet. - Blöcke bestehen aus 8x8 Pixel, vier Y-Blöcke und
die zwei dazugehörigen C-Blöcke bilden einen
Makroblock. - Motion Compensation erlaubt einen Vektor pro
Makroblock mit Werten zwischen -15 und 15.
1
5
6
2
4
3
Y CB CR
6H.261 fortgesetzt
- QCIF kodierte bilder maximal 64Kbits, CIF 256
Kbits - BCH Fehlerbehandlung (Bose, Chaudhuri and
Hocquengham). - 512 Bit Block mit 492 Bit Daten, 18 parity Bits
einem Framebit und einem Füllindikator Bit. - Sendefrequenz wird extern geregelt (Interface
I.420) - DCT
- Quantisierung DC 1 alle anderen 1 bis 31
7H.261 noch mehr
- Anhang A spezifiziert genauigkeit der DCT.
- Anhang B spezifiziert einen Hypothetischen
Referenz Dekoder. - Anhang C Codec verzögerungsmessung
- Anhang D Standbildübertragung
8H.263
- Für Videokonferenzen per Standleitungen oder
Internet. - Spezifiziert für sub-QCIF,QCIF,CIF,4CIF,16CIF.
- Wie H.261 aber
- MC wird mit Vektorwerten zwischen -16 und 15.5
mit Halbpixeln durchgeführt. - Fehlerkorrektur ist optional Anhang H.
- Es gibt viele viele Anhänge, von A bis X.
- Zusammenfassung von Makroblocks zu GOBs oder
Slices. - Fast schon MPEG 4.
9H.263 Picture
PSC TR PTYPE PQUANT CPM PSBI TRB DBQUANT PEI PSUPP PEI GOBs ESTUF EOS PSTUF
- Beschreibt ein Bild
- Startcode(PSC), Bildreferenz(TR), Multipoint
Infos (Anhang C) - Bildtyp I-,P-,PB-,B-,EI-,EP-Frame und Bildformat
(PTYPE) - Anhänge D,E,F,G,I,J,K,N,P,Q,R,S und T
((PLUS)PTYPE) - Quantisierungsinformationen (DQUANT, DBQUANT)
- Stopfbits, Ende der Sequenz (EOS,PSTUF)
- Allein mit 44 Bit für PSC und EOS ist der Header
groß. - Statt PTYPE kann eine PLUSPTYPE Struktur
verwendet werden
PLUSPTYPE CPM PSBI CPFMT EPAR CPCFC ETR UUI SSS
ELNUM RLNUM RPSMF TRPI TRP BCI BCM
RPRP
10H.263 GOB
GSTUF GBSC GN GSBI GFID GQUANT Macroblock Data
- Eine GOB (Group of Blocks) enthält meist eine
Reihe Makroblocks. Der erste GOB-Header ist
nichtvorhanden. Die Header der anderen GOBs
können leer bleiben. - Stopfbits(GSTUF), 17Bit Startcode(GBSC).
- Quantisierer Wert der für alle nachfolgenden
Blöcke des aktuellen Bildes gilt (GQUANT). - Alternativ dazu Slices, Anhang K
- Erlauben Gruppierung von rechteckigen Bereichen
im Bild.
11H.263 Makroblock
Picture type MB type Name COD MCBPC CBPY DQUANT MVD MVD2-4
INTER not coded - X
INTER 0 INTER X X X X
INTER 1 INTERQ X X X X X
INTER 2 INTER4V X X X X X
INTER 3 INTRA X X X
INTER 4 INTRAQ X X X X
INTER 5 INTER4VQ X X X X X X
INTER stuffing - X X
INTRA 3 INTRA X X
INTRA 4 INTRAQ X X X
INTRA stuffing - X
- INTER-Block mit Nullvektor ohne Differenz hat
keine Daten . COD signalisiert so einen Block. - MCBPC bestimmt den Untertyp des MB
- DQUANT modifiziert den momentanen QUANT Wert
- Motion Vektor(en) Anhänge D und F definieren
einen erweiterten Vektormodus. Die Vektoren sind
VLC kodiert.
12H.263 Block
- Der kodierte Block besteht aus 8 Bit DC und den
AC Werten als VLC. - LAST1 letzter AC ! 0
- RUN ACs0 vor dem AC
- LEVEL Wert des ACs
- VLC Der gespeichertBitcode präfixfrei
- Alle nicht vorhandenen Kombinationen werden mit
22 Bit als Escape(7), LAST(1), RUN(6) und
LEVEL(8) kodiert. - Das klein s ist das Vorzeichen des Levels.
INDEX LAST RUN LEVEL BITS VLC CODE
0 0 0 1 3 10s
1 0 0 2 5 1111 s
2 0 0 3 7 0101 01s
100 1 39 1 13 0000 0101 1110s
101 1 1 13 0000 0101 1111s
102 ESCAPE 7 0000 011
13Wir kodieren jetzt ein INTRA Bild
- Wir betrachten die Kodierung eines INTRA-Bildes,
da man notfalls nur mit diesen auskommt. - Es fängt mit dem Header an, dazu muss man
einzelne Bits schreiben können (brauchen wir auch
später oft).
define PUT_BITS(bits, nBits, nTempBits,
tempBits, bitStream) \ nTempBits
(nBits)\ // gezählte Bits erhöhen if
(nTempBits gt 32) \ // wenn sie nicht mehr ins
INT passen u_int extra (nTempBits) - 32\ //
Anzahl extrabits tempBits (u_int)(bits) gtgt
extra\ // Bits dazupacken (u_int)bitStream
tempBits\ // Alle bits speichern bitStream
sizeof(u_int)\ // Stream weitersetzen tempBits
(u_int)(bits) ltlt (32 - extra)\ //
extrabits nTempBits extra\ // ins temp
peichern und anzahl setzen else\ //
ansonsten alle bits den temporären
hinzufügen tempBits (u_int)(bits) ltlt (32 -
(nTempBits)) \
14H.263 Kodieren (YUV)
- Am Anfang haben wir das Bild.
- Das brauchen wir im YCRCB (auch YUV) Format. Dazu
führen wir eine RGB ? YUV Konvertierung durch.
Y(0.257R)(0.504G)(0.098B)16 CR(0.439R)-(0
.368G)-(0.071B)128 CB-(0.148R)-(0.291G)(0.4
39B)128
CR
CB
Y
15H.263 Kodieren(DCT)
Direkte Implementierung von
for(int i0ilt 8i) for(int j0jlt 8j)
float koeffizient0.0f for(int
k0klt 8k) for(int l0llt
8l) koeffizient koeffizient
bildBlockk8l
cos(iPI((2k)1)/16)
cos(jPI((2l)1)/16) if
((i0)(j!0))koeffizientkoeffizient1/sqrt(2)
if ((j0)(i!0))koeffizientkoeffizien
t1/sqrt(2) if ((j0)(i0))koeffizien
t0.5koeffizient dctBlocki8j0.25ko
effizient
16H.263 Kodieren(DCT)
- Beschleunigung der DCT z.B. durch Vorberechnen
eines Teiles der DCT. - Weitere Optimierungen sind spezielle
Implementierungen für MMX,SSE,3DNOW
void init_dct() int i, j double s
for (i0 ilt8 i) s (i0) ?
sqrt(0.125) 0.5 for (j0 jlt8
j) cij s cos((PI/8.0)i(j0
.5))
17H.263 Kodieren (Quantisierung)
- Die Quantisierung des DC Wertes erfolgt in 8er
Schritten - Die AC Werte werden begrenzt auf -255 bis 255,
wobei QUANT DQUANT die Schrittgröße bestimmen. - Anhang T Modified Quantization mode
- verändert den Einfluß von DQUANT auf QUANT
- erlaubt Werte bis 2040 statt 127 bei der
kodierung - Unterschiedliche Quantisierung der
Chrominanzwerte - Implementierung
- Level (Coeff/QUANT-1) /2 wenn QUANT ungerade
- Level ((Coeff1)/QUANT-1) /2 wenn QUANT gerade
18H.263 Kodieren (ZigZag)
- Nun folgt die ZigZag Anordnung der Daten, H.263
bietet hier mehrere Varianten (Anhang I
Advanced INTRA Coding mode) neben dem normalen
Zig Zag.
1 2 3 4 11 12 13 14 1 5 7 21 23 37 39 53
5 6 9 10 18 17 16 15 2 6 8 22 24 38 40 54
7 8 20 19 27 28 29 30 3 9 20 25 35 41 51 55
21 22 25 26 31 32 33 34 4 10 19 26 36 42 52 56
23 24 35 36 43 44 45 46 11 18 27 31 43 47 57 61
37 38 41 42 47 48 49 50 12 17 28 32 44 48 58 62
39 40 51 52 57 58 59 60 13 16 29 33 45 49 59 63
53 54 55 56 61 62 63 64 14 15 30 34 46 50 60 64
19H.263 Kodieren (VLC)
- Die AC Koeffizienten werden als (LAST,RUN,LEVEL)
Tupel gespeichert. - Dabei werden die festgelegten Codes Variabler
Länge verwendet. - Anhang T definiert hier eine neue Escapesequenz
um die Werte bis 2040 in konstante 11 Bit Level
zu verpacken. - Anhang I ändert die Kodierung zur Nutzung von
Informationen aus Nachbarblöcken. - Anhang E definiert einen Syntax-based Arithmetic
Coding mode statt der VLC tabellen.
20H.263 Kodieren (VLC)
- Für die Implementierung greifen wir wieder stark
auf das PUT_BITS define zurück. - Am besten legt man sich einen Hash an, der unter
Eingabe des Tupels den VLC Code liefert. - Ist der Code nicht vorhanden müssen wir das Tupel
direkt speichern.
21H.263 Andere Frames
- Bisher haben wir nur ein komplettes Bild INTRA
kodiert. - Neben den I-Frames gibt es noch einige weitere
bei H.263 die motion compensation verwenden um
Platz zu sparen. - Dieser Zusatzaufwand findet zwischen YUV
Kodierung und DCT statt. - Die DCT kodiert dann nur Differenzen.
- Evtl. werden komplette Makroblöcke verworfen
(wegen geringer Änderung).
22H.263 P-Frames
- Bilder mit INTER-Blocks auch bei H.261 vorhanden
- Makroblocks eines Bildes können gemischt INTER
und INTRA kodiert sein siehe H.263 Makroblock. - Anhang G PB-Frames kombinieren ein P-Frame und
ein komplett bi-direktional vorhergesagtes
B-Frame. - Anahng M improved PB-Frameserlaubt
unidirektionale B-Frames.
23H.263 Motion Compensation
- Nur bei INTER-Blocks
- Motionvektoren mit Halbpixeln verlangt
Interpolation - Werte zwischen -16 und 15,5 erlauben nur kleinen
Suchbereich. - Deswegen gibt es
24H.263 Motion Compensation
- Anhang D Unrestricted Motion Vector mode
- Erlaubt Vektoren auf Pixel außerhalb des Bildes
zu zeigen. - Für den Pixelwert wird der Vektor auf den Rand
projeziert - Vektoren können außerdem länger sein abhängig
vom Format. - Anhang F Advanced Prediction modes
- Vier Vektoren pro Makroblock.
- Pixelwerte werden aus einer gewichteten Summe
von drei referenzierten Werten bestimmt.
Breite des Bildes Maximaler horizontaler Wert
4, , 352 -32, 31.5
356, , 704 -64, 63.5
708, , 1408 -128, 127.5
1412,, 2048 -256, 255.5
25Alle Anhänge
- Annex A Inverse transform accuracy
specification - Annex B Hypothetical Reference Decoder
- Annex C Considerations for Multipoint
- Annex D Unrestricted Motion Vector mode
- Annex E Syntax-based Arithmetic Coding mode
- Annex F Advanced Prediction mode
- Annex G PB-frames mode
- Annex H Forward Error Correction for coded
video signal
26Alle Anhänge
- Annex I Advanced INTRA Coding mode
- Annex J Deblocking Filter mode
- Annex K Slice Structured mode
- Annex L Supplemental Enhancement Information
Specification - Annex M Improved PB-frames mode
- Annex N Reference Picture Selection mode
- Annex O Temporal, SNR, and Spatial Scalability
mode - Annex P Reference Picture Resampling
- Annex Q Reduced-Resolution Update mode
27Alle Anhänge
- Annex R Independent Segment Decoding mode
- Annex S Alternative INTER VLC mode
- Annex T Modified Quantization mode
- Annex U, specifying an optional Enhanced
Reference Picture Selection (ERPS) mode, - Annex V, specifying an optional Data Partitioned
Slice (DPS) mode, and - Annex W, specifying optional Additional
Supplemental Enhancement Information - Annex X Profiles and Levels Definition
28H.323
- Eine Videokonferenz hat nicht nur ein Bild
- Wir brauchen was für
- Bildübertragung
- Tonübertragung
- Austausch von Einstellungen
- Verbindungsaushandlung
- Andere Datendienste (Chat, Whiteboard usw.)
- Das bietet uns H.323 zusammen mit anderen H.XXX
29H.323 Hintergrund
- Entstand 1996 als Nachfolger von H.320 welches
für Videokonferenzen über ISDN gedacht ist. - Aktuell Version 4 von 2000.
- H.323 verlangt mindestens Audio nach G.711.
- Andere Daten als Audio/Video müssen sich an den
T.120 Standard halten. - Unterstützt zentrale Verzeichnisse
30Die Komponenten von H.323
- H.323 ist nicht nur ein Client Programm
(Terminal). - Es gibt mehrere Komponenten die H.323 verstehen.
- GatekeeperDieser stellt Addressübersetzung und
Bandbreitenkontrolle zur Verfügung. - Multipoint Controller und ProcessorKoordiniert
mehrere Terminals, so dass diese gemeinsam an
einer Konferenz teilnehmen können. - ProxyDieser kanalisiert die Verbindung zwischen
Terminals z.B. durch eine Firewall.
31Die Hs in H.323
- H.225.0 verpackt Daten fürs LAN, initiert und
beendet Verbindungen mit Terminals, Proxys, etc.
über multiple Kanäle. - H.245 Steuerung der Medienströme, Austausch von
Kompatibilitäts-informationen, Steuerung der
Datenkanäle und andere Kommandos. - H.450 Aushandlung weiterer Kommunikationsmittel
- H.235Sicherheitsprotokolle (Authentifizierung,
Verschlüsselung) - H.332Für die Koordination von größeren
Konferenzen - G.711 G.722 G.723 G.728 G.729Audio Codecs mit
Datenraten von 5.3 Kbps bis 64 Kbps
32H.263 mit H.323
- Bis zu vier H.263 Substreams werden verwendet.
- Alle vier sind komplett unabhängig.
- Trennblock trennt die streams
- End of Substream und Substream ID
- Anhalten einzelner Streams mit Freeze Kommandos.
- Im Picture Header kodiert.
- Hält Video an bis es aufgehoben wird oder ein
Timeout auftritt. - Möglichkeit Teile des Bildes einzufrieren.
- Markierung von Bildern oder Videoabschnitten zur
externen Verwendung (speicherung o.ä.)
ESTUF EOSBS ESBI
33Ein Beispiel
- Netmeeting, ein Videokonferenztool von Microsoft.
- Klein, simpel, umsonst und quasi-Standard für
Videokonferenzen mit Standardhardware.
34Fragen ?