Używam tego między Chrome a moim telefonem:
Opóźnienie jest naprawdę dobre - mniej niż 1 sekunda.
Próbowałem powielić to na moim komputerze bez powodzenia.
ffmpeg -f video4linux2 -i /dev/video0 -s 320x200 -r 50 -deadline realtime -vcodec libvpx -f webm -fflags nobuffer udp://10.0.0.55:9002
A potem za pomocą ffplay po drugiej stronie.
Nadal ma kilka sekund opóźnienia.
W końcu chciałbym przesyłać strumieniowo z mojego komputera na telefon z Androidem, ale opóźnienie musi być dobre.
Edytuj - działa znacznie lepiej. Gdybym mógł się trochę tego ogolić, byłbym szczęśliwy:
ffmpeg -vcodec rawvideo -f video4linux2 -i /dev/video0 -s 320x200 -r 25 -vcodec libvpx -f rtp -deadline realtime rtp://10.0.0.55:9002
ffmpeg
video-streaming
David N. Welton
źródło
źródło
Odpowiedzi:
Problem wynika głównie z faktu, że używasz transkodowania programowego zamiast transkodowania sprzętowego .
Zasadniczo, jeśli konwersja wykorzystuje przyspieszenie sprzętowe, opóźnienie będzie mniejsze niż sekunda (zwykle milisekundy). Jeśli odbywa się to w oprogramowaniu, opóźnienie będzie rzędu ponad jednej sekundy.
FFmpeg obsługuje przyspieszenie sprzętowe, ale zwykle jest trudne, aby działało dla Ciebie.
https://trac.ffmpeg.org/wiki/HWAccelIntro
Z drugiej strony Google Chrome obsługuje kodowanie / dekodowanie sprzętowe VP8 i H264 (tam, gdzie jest dostępne) zarówno na komputerze, jak i telefonie z Androidem:
http://code.google.com/p/chromium/issues/detail?id=428223
źródło