ffmpeg ffserver(avserver) стриминг видео в rtsp
Имеется kubuntu 12.10 Пытаюсь стримить видео с вебкамеры в флеш и RTSP. Конфиги взяты с хабра и подправлены (http://habrahabr.ru/post/78677/): ==============================================================
Port 8099
RTSPPort 5454
BindAddress 0.0.0.0
MaxClients 100
MaxBandwidth 20000
NoDaemon
# Фид, надо запомнить feed.ffm, он нам потребуется при запуске
ffmpeg
<Feed feed.ffm>
File /tmp/feed.ffm
FileMaxSize 3M
Launch avconv -s 352x288 -r 20 -f video4linux2 -i /dev/video0 -pix_fmt yuv420p
</Feed>
<Stream test.flv>
# Ранее объявленный фид
Feed feed.ffm
Format flv
VideoCodec mjpeg
VideoFrameRate 25
VideoBufferSize 80000
VideoBitRate 200
# Качество видео от 1 до 31, 1 == отлично 31 == фи!
VideoQMin 1
VideoQMax 5
# Разрешение, везде должно быть одинаково!
VideoSize 640x480
PreRoll 1
Noaudio
</Stream>
# Флешка test.swf для просмотра трансляции
<Stream test.swf>
Feed feed.ffm
# Будет запускаться в Adobe Flash Player
Format swf
VideoCodec mjpeg
VideoFrameRate 25
VideoBufferSize 50000
VideoBitRate 100
VideoQMin 1
VideoQMax 5
VideoSize 640x480
PreRoll 0
Noaudio
</Stream>
# RTSP
<Stream test.rtsp>
Feed feed.ffm
Format rtp
VideoCodec libx264
VideoFrameRate 20
VideoBufferSize 2000
VideoBitRate 800
VideoQMin 1
VideoQMax 31
# Разрешение, везде должно быть одинаково!
VideoSize 640x480
Noaudio
</Stream> ============================================================
Долго мучился с параметрами, домучился до того, что в фиде запускается камера(видно по индикации светодиода). Но при попытке подключения любым из плееров(vlc, gst-launch, avplay) идет ожидание и видео нет(но ошибок не показывает). При заходе на страницу http://localhost:8090/test.swf только загрузка, ничего нет.
так собственно кто-нибудь может помочь разобраться в чем проблема?
А задача вобщем то в том, что бы стримить видео с вебкамеры(или другой usb) в rtsp потоке. Что только не пробовал.
VLC Стримит, но есть задержка в секунды 2, изменение разних параметров не помогло, вот строка которой запускаю, если вдруг тут есть варианты:
cvlc v4l2:///dev/video0:v4l2-fps=25:v4l2-caching=1 --sout '#transcode{vcodec=h264,venc=x264{tune=zerolatency,preset=ultrafast},vb=300,scale=1,width=320,height=200,fps=25,noaudio}:rtp{url=192.168.1.13,port=7777,sdp=rtsp://192.168.1.13:7777/stream}' --rtsp-host=192.168.1.13-caching=1 --dshow-caching=0 -I dummy
GStreamer тоже пробовал, собирал тестовый пример ихнего gst-rtsp-server, но там какието проблемы с rtsp_media_factory, я ставил такие параметры: gst_rtsp_media_factory_set_launch (factory, "( videotestsrc is-live=1 ! x264enc ! rtph264pay name=pay0 pt=96 )"); да и не только такие, много что перепробовал, всё время выдает ошибки при запросе на подобии этой(чаще всего это):
(GstRtspServer_test:10077): GLib-GObject-CRITICAL **: g_object_ref: assertion `G_IS_OBJECT (object)' failed
** (GstRtspServer_test:10077): CRITICAL **: gst_rtsp_media_factory_get_auth: assertion `GST_IS_RTSP_MEDIA_FACTORY (factory)' failed
Также смотрел на livemedia, но гугление на данную тему не особо что показал(если есть нормальные примеры как это дело можно провернуть, то буду признателен).
Вобщем бьюсь не первые сутки, если есть мысли, поделитесь пожалуйста.
P.S./извиняюсь за объемный пост
UPD: по ffmpeg Если запустить feed отдельным процессом (вместо Launch ...) строкой avconv -s 640x480 -r 20 -f video4linux2 -i /dev/video0 -pix_fmt yuv420p -f h264 http://localhost:8090/feed.ffm
то в логах вот что выдает:
avconv version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers built on Apr 2 2013 17:00:59 with gcc 4.6.3 [video4linux2 @ 0x8c783e0] The driver changed the time per frame from 1/20 to 1/30 [video4linux2 @ 0x8c783e0] Estimating duration from bitrate, this may be inaccurate Input #0, video4linux2, from '/dev/video0': Duration: N/A, start: 482284.519933, bitrate: 147456 kb/s Stream #0.0: Video: rawvideo, yuyv422, 640x480, 147456 kb/s, 30 tbr, 1000k tbn, 30 tbc [buffer @ 0x8c7c4c0] w:640 h:480 pixfmt:yuyv422 [avsink @ 0x8c7a420] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out' [scale @ 0x8c73a40] w:640 h:480 fmt:yuyv422 -> w:640 h:480 fmt:yuv420p flags:0x4 [libx264 @ 0x8c79660] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX [libx264 @ 0x8c79660] profile Main, level 3.0 Output #0, h264, to 'http://localhost:8090/feed.ffm': Metadata: encoder : Lavf53.21.1 Stream #0.0: Video: libx264, yuv420p, 640x480, q=-1--1, 90k tbn, 30 tbc Stream mapping: Stream #0:0 -> #0:0 (rawvideo -> libx264) Press ctrl-c to stop encoding non-strictly-monotonic PTS size= 86kB time=1.90 bitrate= 369.7kbits/s its/s [libx264 @ 0x8c79660] non-strictly-monotonic PTS Last message repeated 1 times
Application provided invalid, non monotonically increasing dts to muxer in stream 0: 333000 >= 333000 [h264 @ 0x8c78f60] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 342000 >= 342000
Application provided invalid, non monotonically increasing dts to muxer in stream 0: 351000 >= 351000 non-strictly-monotonic PTS size= 277kB time=5.93 bitrate= 382.0kbits/s [libx264 @ 0x8c79660] non-strictly-monotonic PTS Last message repeated 1 times
И так далее.
Если убрать -f h264 и запускать так:
avconv -s 640x480 -r 20 -f video4linux2 -i /dev/video0 -pix_fmt yuv420p http://localhost:8090/feed.ffm
то логи не выдают предупреждений, но видео все равно нет, но запуск через avplay командой avplay rtsp://localhost:5454/test.rtsp выдает вот что
avplay version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2003-2013 the Libav developers built on Apr 2 2013 17:00:59 with gcc 4.6.3 [rtsp @ 0xafd00480] UDP timeout, retrying with TCP
тут виснет и после остановки выдает:
^C[rtsp @ 0xafd00480] Could not find codec parameters (Video: h264) [rtsp @ 0xafd00480] Estimating duration from bitrate, this may be inaccurate rtsp://localhost:5454/test.rtsp: could not find codec parameters