2012-02-02 22 views
13

Przesyłam strumieniowo wideo i audio z kamery internetowej/mikrofonu przez UDP. Kiedy oglądam strumień (nawet na tej samej maszynie), występuje opóźnienie około 4 sekund. Próbowałem ustawić ustawienie pamięci podręcznej UDP na 0 lub 1, ale wydaje się, że nie pomaga. Próbowałem zmniejszyć szybkość transmisji wideo i audio, używając dźwięku mono i zmniejszając częstotliwość próbkowania, wszystko bez skutku.Jak zmniejszyć opóźnienie - Przesyłanie strumieniowe VLC z kamery internetowej

Czy ktoś ma jakieś pomysły, w jaki sposób mogę zmniejszyć opóźnienie, do czegoś lepszego dostosowanego do wideokonferencji, tj. < 1 sekundę?

Czy istnieje ustawienie, które można zastosować do przeglądarki/streamera, które może pomóc?

Dzięki,

Marc

Odpowiedz

3

W moim badaniu VLC streamingu z kamery, mam 2-3 sekundy opóźnienia dla UDP multicast strumienia transkodowanego z WMV/ASF pojemnika + kodeka WMV2 zDell Twórczej zintegrowaną kamerę internetową z cif rozmiar wideo.

Jeśli korzystasz z kodeka MP4/MOV + kodeku H.264, otrzymałem dwukrotne opóźnienie pierwszego z tych samych ustawień w bitrate, fps i scale.

Wyłączono dźwięk w obu ustawieniach przesyłania strumieniowego, ponieważ nie byłem nim zainteresowany.

zrobiłam badanie z dwóch wersji VLC:

  • VLC 1.1.11 (najnowsza stabilna wersja Windows)
  • VLC 2.1.0 (najnowsza wersja) nightly zbudować

Z pierwsza wersja, mógłbym transkodować i przesyłać strumieniowo z kamery internetowej, ale nie mógł poprawnie odtwarzać strumienia (dał tylko poczerniony strumień wideo). dobrze również do transkodowania, przesyłania strumieniowego i odtwarzania.

Badanie to zostało wykonane na:

Intel Core 2 Duo T7250 
4GB DDR2-667 SDRAM 
SATA 7200 RPM HDD 
GeForce 8400M GS 128MB GDDR3 (+ 128MB shared memory = 256MB video memory) 
Windows XP Pro SP3 
+0

Próbowałem ustawień simular na moim laptopie, procesor to i7, jednak karta graficzna jest zintegrowanym procesorem Intel. Czy wiesz, czy procesor karty graficznej zostanie użyty podczas przesyłania strumieniowego wideo? To może być mój problem. – Marc

+1

Tak, w systemie Windows "dshow: //" jest interfejsem DirectShow; jak każdy interfejs DirectX, użyje on wszystkich akcelerowanych sprzętowo funkcji GPU DirectX, które mogą poprawić wydajność, jeśli zostaną wykryte po stronie serwera lub po stronie klienta. – ecle

7

Jeśli używasz protokołu RTSP do strumienia audio/video, można dostosować opóźnienie w

Narzędzia->> all> wejściowego/codecs-> demuxers-> RTP/RTSP-> wartość buforowania

Narzędzia->> all> wejścia/codecs-> demuxers-> RTP-> RTP de jitter długość bufora

+8

Uwaga: "Wartość buforowania (ms)" i "Opcja długości bufora jittera (msec) RTP" nie występuje w interfejsie GUI nocnej wersji kompilacji VLC 2.1.0-git-20120203-0008. Nawet element 'Input/Codecs-> Access modules-> UDP' nie jest dostępny, więc opcja" buforowanie UDP "nie jest dostępna z GUI. – ecle

+2

Nazywają to teraz "buforowaniem sieciowym", ale nie działa to w ten sam sposób. Nie jestem w stanie uzyskać dużego opóźnienia, które dostałem w 1.1.9 (~ 100-150 ms) w 2.0.4 (o wiele więcej, staje się niestabilny dla tak niskich wartości). –

+1

@YngveSneenLindal jakiego wiersza poleceń użyłeś do tak dobrych opóźnień w wersji 1.1.9? – rogerdpack

4

Spróbuj .

#!/bin/sh 
ETH=eth0 

cvlc --miface=$ETH v4l2:///dev/video0 :input-slave=alsa://hw:0,0 :sout=#transcode{vcodec=h264,venc=x264{preset=ultrafast,tune=zerolatency,intra-refresh,lookahead=10,keyint=15},scale=auto,acodec=mpga,ab=128}:rtp{dst=224.10.0.1,port=5004,mux=ts} :sout-keep >/dev/null 2>/dev/null & 
vlc1=$! 
vlc --miface=$ETH rtp://224.10.0.1 >/dev/null 2>/dev/null & 
vlc2=$! 
wait $vlc2 
kill -9 $vlc1 

mam 2 sekundy opóźnienia z kamery 720p, produkować około 2.5Mbit/s trafic i obciążenia dla jednego rdzenia ~ 30%.

Powiązane problemy