Upload
konrad-russa
View
227
Download
1
Embed Size (px)
DESCRIPTION
in polish
Citation preview
Metody kompresji i transmisji audio/video w sieci Internet
Próbkowanie i kwantyzacja
Standardy kompresji
Audio Kompresja mowy
LPC (FS 1015 ) CELP (G.728) RPE (LPC) PCM (G.711)
Kompresja dźwięku ADPCM (G.722,
G.726, G.727) MPEG AC3
Video ITU
H.261 H.263
MPEG MPEG-1 MPEG-2 MPEG-4
System transmisji dźwięku
Standard MPEG-1
Porównanie standardów kompresji audio
Porównanie cd...
20 ms mowy jest reprezentowana w 33 bajtach dla kodowania GSM. Stąd w jednej sekundzie mamy (50 ramek/s × 33 bajty/ramkę), a całkowita przepływność wynosi 1.650 B/s. Zamiana na bity 1.650 × 8 = 13,200 b/s. Te wielkości nie uwzględnia nagłówków RTP/UDP/IP które dodają 40 bajtów do pakietu. (50 × (33+40)) = 3.650 × 8 = 29.2 kb/s.
20 ms sygnału mowy zakodowanego w G.711 (ULAW/PCM) jest reprezentowana w 160 bajtach. Stąd
jedna sekunda wymaga (50 ramek/s × 160 bajtów/ramkę) = 8.000B/s, zamieniając tą wielkość na bity
uzyskamy 64 kb/s. Jednak ramka w sieci IP będzie miała rozmiar 80 kb/s. 20ms sygnału mowy nie może być reprezentowane w G.723. Koder jest zdefiniowany dla ramek 30ms.
30ms mowy jest reprezentowane przez 24 bajty zakodowanego sygnału G.723. Dla jednej sekundy
mamy (33 ramki/s × 24 bajtów/ramkę) = 792 B/s, jest to pasmo zakodowanego strumienia.
Zamieniając tę wartość na bity otrzymamy 6.336 kb/s. Z uwzględnieniem nagłówków RTP/UDP/IP
całkowita przepływność wyniesie 16.896 kb/s.
Kompresja video
Przykładowo dla wideokonferencji w sieci ISDN w której sekwencja obrazów kolorowych w formacie CIF (ang. Common Intermediate Format) standardu H.261 o częstotliwości 25
ramek/s przesyłana będzie siecią o przepustowości 384 kbit/s, wymagany stopień kompresji wynosi 79:1, zgodnie z wyliczeniem ((288 × 352 + 144 × 176 + 144 × 176) × 8 bitów × 25
ramek/s) / 384 kbit/s = 79.
MPEG-2
Strumień transportowy TS (ang. Transport Stream) – umożliwia przesyłanie strumienia danych audio i video kanałami z zakłóceniami (łącze satelitarne, koncentryczne kable sieci telewizyjnej), pozwala łączyć wiele strumieni AV o niezależnych zegarach. Strumień TS używa pakietów o stałej długości 188 bajtów. TS wspiera asynchroniczne łączenie strumieni AV (np. programów telewizyjnych), szybki dostęp do danego strumienia (np. zmiana odbieranego kanału telewizyjnego), synchronizacja elementarnych strumieni dla późniejszej ich prezentacji, zarządzanie buforami dekodera AV o stałej i zmiennej długości bitowej.
Real Time Transport Protocol
Version- (V) 2 bity: wersja protokółu Padding- (P) 1 bit: ustawiony bit oznacza, że dodano
wypełnienie, a ostatni bajt wskazuje ile jest bajtów
wypełnienia Extension- (X) 1 bit: jeśli bit jest ustawiony, oznacza że
nagłówek jest poprzedzony nagłówkiem rozszerzenia,
używane w przypadku zmian formatu danych (ang.
payload type). CSRC count- (CC) 4 bity: licznik zawiera liczbę
identyfikatorów CSRC należących do obecnego
nagłówka Marker- (M) 1 bit: interpretacja pola jest definiowana
przez profil
Payload type- (PT) 7 bitów: pole identyfikuje format danych RTP, wymagana jest interpretacja zawartości przez aplikację. Profil definiuje standardowe mapowanie zawartości danych kodowych do PT.
Sequence number- 16 bitów: zwiększany o jeden po
każdorazowym wysłanym komunikacie
Timestamp- 32 bity: znacznik czasowy, znakowanie
jest w momencie wysłania pierwszego bajtu danych,
inkrementowany jest sekwencyjnie.
Synchronization source- (SSRC) 32 bity:
synchronizacja źródła, identyfikator powinien mieć
wartość losową, tak by dwa źródła synchronizacji
należące do tej samej sesji RTP nie posiadały tego
samego identyfikatora. Numer określa nadawcę
wiadomości zawierającej numer sekwencyjny oraz
znacznik czasowy danych.
CSRC list- 0 do 15 elementów, każdy opisany przez 32
bity: lista składowych źródeł dla danych zawartych w
pakiecie. Numer identyfikatorów jest podany przez pole
CC. Identyfikowanych jest tylko 15 źródeł.
Identyfikatory CSRC są umieszczane przez mixery
używając identyfikatorów SSRC składowego źródła.
Payload Type
Payload Type cd...
RTCP
Multiemisja
Zakres od 224.0.0.0 do 239.255.255.255
IGMP
Procedura polega na tym, że host wspierający IGMP przyłącza się do grupy wszystkich hostów (adres
224.0.0.1). To jest jedyny adres, którego członkiem musi być każdy host sieciowy. IGMP pracuje na
styku hostów i ich ruterów multicastowych, a także host – host, ruter - ruter. IGMP informuje lokalny
ruter o członkostwie hosta w multicastowej grupie. Pracuje na bazie usług IP, nie stosuje przy tym
warstwy transportowej TCP/UDP.
Java Media Framework
JMF posiada wsparcie dla wielu formatów multimedialnych i standardów kompresji wliczając
kodowanie i dekodowanie, są to między innymi: JPEG, MPEG-1, MPEG-2, QuickTime, AVI, WAV, MP3, ALAW, ULAW, GSM, G723, G728, G729, H261, H263, MIDI. Wspiera protokoły dostępowe:
HTTP, HTTPS, FTP, RTP, RTSP.
Stany pracy
Worker ReceiverThread
public class ReceiverThread extends Thread implements ReceiveStreamListener,SessionListener, ControllerListener {
/** * ReceiveStreamListener */public void update(ReceiveStreamEvent event) {
RTPManager rtpManager = (RTPManager) event.getSource();ReceiveStream receiveStream = event.getReceiveStream();Participant participant = receiveStream.getParticipant();if (event instanceof NewReceiveStreamEvent) {
receiveStream = ((NewReceiveStreamEvent)event).getReceiveStream();dataSource = receiveStream.getDataSource();
Worker TransmitterThread
public class TransmitterThread extends Thread implements ControllerListener,ReceiveStreamListener, RemoteListener {
/** * inicjuje urzedzenia i tworzy srodowisko transferu danych * * @return String */private String createProcessor() {
try {if (chosenFormat.equals(Codecs.JPEG_RTP)
|| chosenFormat.equals(Codecs.H263_RTP)|| chosenFormat.equals(Codecs.H261_RTP)) {
processor = Manager.createProcessor(new MediaLocator("vfw://0"));
} elseprocessor = Manager.createProcessor(new MediaLocator(
"dsound://"));System.out.println();
} catch (NoProcessorException e) {return e.getMessage() + "\n";
} catch (IOException e) {return e.getMessage() + "\n";
}
Worker TransmitterThread cd... /**
* metoda interfejsu ControllerListener, kontrola zdarzen dla klasy * Processor * * @param event */public void controllerUpdate(ControllerEvent event) {
if (event instanceof ConfigureCompleteEvent|| event instanceof RealizeCompleteEvent|| event instanceof PrefetchCompleteEvent) {
synchronized (obSync) {transferOK = true;obSync.notifyAll();
}} else if (event instanceof ControllerErrorEvent) {
synchronized (obSync) {transferOK = false;obSync.notifyAll();
}} else if (event instanceof EndOfMediaEvent) {
kill();System.exit(0);
}}