J'essaie de diffuser la vidéo H264 de ma webcam Logitech C920. J'utilise de tels ffserver.conf:
Port 8099
NoDaemon
BindAddress 0.0.0.0
RTSPPort 5004
RTSPBindAddress 0.0.0.0
MaxClients 10
MaxBandwidth 10000
CustomLog -
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 20M
</Feed>
<Stream viewport1>
Feed feed1.ffm
Format rtp
VideoCodec libx264
VideoFrameRate 15
VideoBufferSize 40
VideoBitRate 3000
VideoQMin 1
VideoQMax 31
VideoSize 640x480
PreRoll 0
NoAudio
Strict -1
</Stream>
<Stream stat.html>
Format status
</Stream>
<Redirect index.html>
URL http://ffmpeg.sourceforge.net/
</Redirect>
Et je commence FFMPEG comme ceci:
./ffmpeg -f video4linux2 -s 640x480 -r 15 -re -i /dev/video0 -an -vcodec libx264 -bf 5 http://localhost:8099/feed1.ffm
Mais dans la sortie, il y a:
[video4linux2,v4l2 @ 0xc0b5e0] Estimating duration from bitrate, this may be inaccurate
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 2930.711051, bitrate: 73728 kb/s
Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 640x480, 73728 kb/s, 15 tbr, 1000k tbn, 15 tbc
[libx264 @ 0xc183f0] using cpu capabilities: ARMv6 NEON
[libx264 @ 0xc183f0] VBV buffer size cannot be smaller than one frame, using 400 kbit
[libx264 @ 0xc183f0] profile High 4:2:2, level 2.2, 4:2:2 8-bit
[libx264 @ 0xc183f0] 264 - core 120 r2151 a3f4407 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=0 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=5 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=1 weightp=2 keyint=50 keyint_min=5 scenecut=0 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=3000 ratetol=1.0 qcomp=0.50 qpmin=10 qpmax=51 qpstep=4 vbv_maxrate=6000 vbv_bufsize=400 nal_hrd=none ip_ratio=1.40 aq=1:1.00
Output #0, ffm, to 'http://localhost:8099/feed1.ffm':
Metadata:
creation_time : now
encoder : Lavf54.44.100
Stream #0:0: Video: h264, yuv422p, 640x480, q=10-51, 3000 kb/s, 1000k tbn, 15 tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo -> libx264)
Press [q] to stop, [?] for help
[libx264 @ 0xc183f0] VBV buffer size cannot be smaller than one frame, using 400 kbit
frame= 12 fps=0.0 q=0.0 size= 4kB time=00:00:00.00 bitrate= 0.0kbits/sframe= 22 fps= 20 q=0.0 size= 4kB time=00:00:00.00 bitrate= 0.0kbits/sframe= 30 fps= 19 q=0.0 size= 4kB time=00:00:00.00 bitrate= 0.0kbits/sframe= 38 fps= 18 q=0.0 size= 4kB time=00:00:00.00 bitrate= 0.0kbits/s
Toute suggestion à ne pas transcoder et diffuser directement la vidéo?
En fait, j'ai réussi avec le streaming de la vidéo H264 avec FFMPEG. J'ai pu faire cela avec l'aide de la liste des utilisateurs FFMPEG, en particulier de Carl Eugen Hoyos, auteur de ce correctif:
diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c
index cd6aeb2..c3f813d 100644
--- a/libavdevice/v4l2.c
+++ b/libavdevice/v4l2.c
@@ -150,6 +150,7 @@ static struct fmt_map fmt_conversion_table[] = {
{ AV_PIX_FMT_NV12, AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_NV12 },
{ AV_PIX_FMT_NONE, AV_CODEC_ID_MJPEG, V4L2_PIX_FMT_MJPEG },
{ AV_PIX_FMT_NONE, AV_CODEC_ID_MJPEG, V4L2_PIX_FMT_JPEG },
+ { AV_PIX_FMT_NONE, AV_CODEC_ID_H264, V4L2_PIX_FMT_H264 },
#ifdef V4L2_PIX_FMT_CPIA1
{ AV_PIX_FMT_NONE, AV_CODEC_ID_CPIA, V4L2_PIX_FMT_CPIA1 },
#endif
Commande réelle que j'ai utilisée:
./ffmpeg -f video4linux2 -s 640x480 -r 15 -vcodec h264 -i /dev/video0 -an http://localhost:8099/feed1.ffm
Mais je n'ai pas pu me débarrasser de la transcodage, alors je suis passé à VLC (et réussissez).
Essayez l'option de copie sur le flux de sortie -codec copy
:
./ffmpeg -f video4linux2 -s 640x480 -r 15 -vcodec h264 -i /dev/video0 -codec copy -an http://localhost:8099/feed1.ffm
Cela fonctionne avec des résultats mitigés. Je suis capable de copier avec vcodec
défini sur mjpeg
mais pas h264
Même si le Logitech HD920 prend en charge les deux. L'option de copie grandement Réduit l'utilisation du processeur.
Ps. Utilisez la dernière version à mesure que la copie a peut-être été cassée dans les versions antérieures.