Softwareentwicklung
›
Thread
ffmpeg, v4l, snd_aloop … sound asyncron (alsa buffer xrun)
Ich versuche, einen Stream zu erstellen, der zufällige Eingaben
automatisch neu lädt. Ich möchte dies später auf eine Datenbank
erweitern.
Jedes Mal, wenn ffmpeg beendet und neu gestartet wird, ändert sich die
Eingabe. Die Verbindung zum RTMP wird kurz unterbrochen, wodurch die
gesamte Verbindung unterbrochen wird. Ich habe dann versucht, Audio und
Video zu trennen, an virtuelle Geräte zu senden und von dort erneut zu
lesen. Teilen Sie den Stream auf virtuellen Geräten auf, bauen Sie sie
direkt zusammen und senden Sie sie an rtmp. Wenn der Eingang dann
ausgetauscht wird, unterbricht das Senden an die Geräte, was den zweiten
ffmpeg nicht stört. Sobald ich aufhöre, an die Geräte zu senden, gehen
die FPS sehr langsam (10 bis 20 Sekunden) von 25 auf 0. Erst dann bricht
der Sender ffmpeg die Verbindung zum RTMP. Das Skript, das die Eingaben
austauscht, benötigt nur eine Sekunde. Ein Praxistest zeigte, dass alles
wie gewünscht funktioniert.
Ich kann die Eingabe ganz bequem ändern, während der zweite ffmpeg den
Stream aufrechterhält ...
Die Freude dauerte nicht lange. Der Sound ist gut 1 Sek. Verzögert. Aber
sporadisch. Manchmal klappt alles super. Manchmal ist der Klang
versetzt.
Ich habe dazu mehrere Skripte geschrieben.
Hintergrund:
Die Datei wird zufällig ausgewählt
Mediendatei wird aufgeteilt und in dev video0 (v4l loopback) und
alsa default (snd_aloop loopback) geschrieben.
Setzen Sie die Splits wieder zusammen und streamen Sie sie auf einen
RTMP-Server
Code, der die Eingabe auswählt und an dev video0 und als
Standardwert sendet
1 #!/bin/bash
2
3 cat /dev/null > log
4
5 while true ;
6 do
7
8 WATERMARK = "watermark.png" ;
9 dir = '/homeXXXXXXXXXX/mix'
10 file = ` /bin/ls -1 " $dir " | sort --random-sort | head -1 `
11 DATEI = ` readlink --canonicalize " $dir / $file " ` # Converts to full path
12
13 if [ -z $DATEI ]
14 then
15 echo "Keine Datei gefunden" >> log;
16 else
17 START = $( date +%s) ;
18 echo "Sende $DATEI " >> log;
19 ffmpeg -re -y -i " $DATEI " -c :v libx264 -vf "fps=25,scale=640:480,setdar=4:3" -async 1 -pix_fmt yuv420p -preset ultrafast -map 0:0 -f v4l2 -vcodec rawvideo /dev/video0 -f alsa default
20 fi
21
22 DOKILL = ` cat kill ` ;
23 if [ " $DOKILL " = "1" ]
24 then
25 break ;
26 fi
27
28 done
Output
1 ./run.sh
2 ffmpeg version 3.2.12-1~deb9u1 Copyright (c) 2000-2018 the FFmpeg developers
3 built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
4 configuration: --prefix=/usr --extra-version='1~deb9u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
5 libavutil 55. 34.101 / 55. 34.101
6 libavcodec 57. 64.101 / 57. 64.101
7 libavformat 57. 56.101 / 57. 56.101
8 libavdevice 57. 1.100 / 57. 1.100
9 libavfilter 6. 65.100 / 6. 65.100
10 libavresample 3. 1. 0 / 3. 1. 0
11 libswscale 4. 2.100 / 4. 2.100
12 libswresample 2. 3.100 / 2. 3.100
13 libpostproc 54. 1.100 / 54. 1.100
14 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/mix/XXXXXXXXXXXXX.mp4':
15 Metadata:
16 major_brand : isom
17 minor_version : 512
18 compatible_brands: isomiso2avc1mp41
19 title : XXXXXXXXXXXXXXX
20
21 encoder : Lavf57.41.100
22 Duration: 00:03:53.48, start: 0.000000, bitrate: 2705 kb/s
23 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 2573 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
24 Metadata:
25 handler_name : VideoHandler
26 Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
27 Metadata:
28 handler_name : SoundHandler
29 Codec AVOption preset (Configuration preset) specified for output file #0 (/dev/video0) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.
30 [Parsed_setdar_2 @ 0x5571234fe020] num:den syntax is deprecated, please use num/den or named options instead
31 -async is forwarded to lavfi similarly to -af aresample=async=1:min_hard_comp=0.100000:first_pts=0.
32 Output #0, v4l2, to '/dev/video0':
33 Metadata:
34 major_brand : isom
35 minor_version : 512
36 compatible_brands: isomiso2avc1mp41
37 title : XXXXXXXXXXX
38
39 encoder : Lavf57.56.101
40 Stream #0:0(und): Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc (default)
41 Metadata:
42 handler_name : VideoHandler
43 encoder : Lavc57.64.101 rawvideo
44 Output #1, alsa, to 'default':
45 Metadata:
46 major_brand : isom
47 minor_version : 512
48 compatible_brands: isomiso2avc1mp41
49 title : XXXXXXXXXX
50
51 encoder : Lavf57.56.101
52 Stream #1:0(und): Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s (default)
53 Metadata:
54 handler_name : SoundHandler
55 encoder : Lavc57.64.101 pcm_s16le
56 Stream mapping:
57 Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
58 Stream #0:1 -> #1:0 (aac (native) -> pcm_s16le (native))
59 Press [q] to stop, [?] for help
60 frame= 736 fps= 24 q=-0.0 Lsize=N/A time=00:00:29.67 bitrate=N/A speed=0.979x
61 video:331200kB audio:5112kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
62 Exiting normally, received signal 2.
The send script 1 #!/bin/bash
2
3 IP = "XXXXXXXXX" ;
4
5 ffmpeg -f video4linux2 -i /dev/video0 -f alsa -acodec pcm_s16le -i default -f flv -async 1 -pix_fmt yuv420p -preset ultrafast -vcodec libx264 -r 25 -s 640x260 -acodec aac rtmp://$IP :1935/live/test
The Output
1 ./send_stream.sh
2 ffmpeg version 3.2.12-1~deb9u1 Copyright (c) 2000-2018 the FFmpeg developers
3 built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
4 configuration: --prefix=/usr --extra-version='1~deb9u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
5 libavutil 55. 34.101 / 55. 34.101
6 libavcodec 57. 64.101 / 57. 64.101
7 libavformat 57. 56.101 / 57. 56.101
8 libavdevice 57. 1.100 / 57. 1.100
9 libavfilter 6. 65.100 / 6. 65.100
10 libavresample 3. 1. 0 / 3. 1. 0
11 libswscale 4. 2.100 / 4. 2.100
12 libswresample 2. 3.100 / 2. 3.100
13 libpostproc 54. 1.100 / 54. 1.100
14 Input #0, video4linux2,v4l2, from '/dev/video0':
15 Duration: N/A, start: 1548393682.674066, bitrate: 110592 kb/s
16 Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480, 110592 kb/s, 30 fps, 30 tbr, 1000k tbn, 1000k tbc
17 Guessed Channel Layout for Input Stream #1.0 : stereo
18 Input #1, alsa, from 'default':
19 Duration: N/A, start: 1548393682.677901, bitrate: 1536 kb/s
20 Stream #1:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
21 -async is forwarded to lavfi similarly to -af aresample=async=1:min_hard_comp=0.100000:first_pts=0.
22 [libx264 @ 0x55e22cfa4f00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
23 [libx264 @ 0x55e22cfa4f00] profile Constrained Baseline, level 2.1
24 [libx264 @ 0x55e22cfa4f00] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
25 Output #0, flv, to 'rtmp://XXXXXXXXXXX:1935/live/test':
26 Metadata:
27 encoder : Lavf57.56.101
28 Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 640x260, q=-1--1, 25 fps, 1k tbn, 25 tbc
29 Metadata:
30 encoder : Lavc57.64.101 libx264
31 Side data:
32 cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
33 Stream #0:1: Audio: aac (LC) ([10][0][0][0] / 0x000A), 48000 Hz, stereo, fltp, 128 kb/s
34 Metadata:
35 encoder : Lavc57.64.101 aac
36 Stream mapping:
37 Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
38 Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
39 Press [q] to stop, [?] for help
40 [alsa @ 0x55e22cf87300] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
41 [video4linux2,v4l2 @ 0x55e22cf84fe0] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
42 Past duration 0.613319 too large 7344kB time=00:01:05.85 bitrate= 913.5kbits/s speed=1.04x
43 Past duration 0.614372 too large 7644kB time=00:01:08.39 bitrate= 915.6kbits/s speed=1.04x
44 Past duration 0.609749 too large 7834kB time=00:01:10.91 bitrate= 905.0kbits/s speed=1.04x
45 Past duration 0.604362 too large 8038kB time=00:01:12.92 bitrate= 903.0kbits/s speed=1.04x
46 Past duration 0.609489 too large 8070kB time=00:01:13.45 bitrate= 900.1kbits/s speed=1.04x
47 Past duration 0.615013 too large 8094kB time=00:01:13.94 bitrate= 896.8kbits/s speed=1.04x
48 Past duration 0.610893 too large 8179kB time=00:01:14.94 bitrate= 894.0kbits/s speed=1.04x
49 Past duration 0.664711 too large
50 Past duration 0.639565 too large 8263kB time=00:01:15.47 bitrate= 896.8kbits/s speed=1.04x
51 Past duration 0.668999 too large 8339kB time=00:01:15.94 bitrate= 899.5kbits/s speed=1.04x
52 Past duration 0.605766 too large
53 Past duration 0.633049 too large 8399kB time=00:01:16.48 bitrate= 899.6kbits/s speed=1.04x
54 Past duration 0.674599 too large
55 Past duration 0.616035 too large 8451kB time=00:01:16.95 bitrate= 899.7kbits/s speed=1.04x
56 Past duration 0.656136 too large
57 Past duration 0.604195 too large
58 Past duration 0.601387 too large 8512kB time=00:01:17.46 bitrate= 900.2kbits/s speed=1.04x
59 Past duration 0.621895 too large 8565kB time=00:01:17.95 bitrate= 900.1kbits/s speed=1.04x
60 Past duration 0.670937 too large 8605kB time=00:01:18.46 bitrate= 898.4kbits/s speed=1.04x
61 Past duration 0.604500 too large 8642kB time=00:01:18.99 bitrate= 896.2kbits/s speed=1.04x
62 frame= 1913 fps= 25 q=-1.0 Lsize= 8670kB time=00:01:19.48 bitrate= 893.6kbits/s speed=1.04x
63 video:7290kB audio:1280kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.160292%
64 [libx264 @ 0x55e22cfa4f00] frame I:8 Avg QP:18.25 size: 15502
65 [libx264 @ 0x55e22cfa4f00] frame P:1905 Avg QP:20.95 size: 3853
66 [libx264 @ 0x55e22cfa4f00] mb I I16..4: 100.0% 0.0% 0.0%
67 [libx264 @ 0x55e22cfa4f00] mb P I16..4: 6.4% 0.0% 0.0% P16..4: 38.1% 0.0% 0.0% 0.0% 0.0% skip:55.5%
68 [libx264 @ 0x55e22cfa4f00] coded y,uvDC,uvAC intra: 46.0% 30.3% 13.4% inter: 20.1% 9.8% 1.1%
69 [libx264 @ 0x55e22cfa4f00] i16 v,h,dc,p: 47% 34% 10% 9%
70 [libx264 @ 0x55e22cfa4f00] i8c dc,h,v,p: 45% 28% 22% 5%
71 [libx264 @ 0x55e22cfa4f00] kb/s:750.98
72 [aac @ 0x55e22cfa62a0] Qavg: 579.067
73 Exiting normally, received signal 2.
Erst ist alles gut und dann kommt
1 Past duration 0.616035 too large 8451kB time=00:01:16.95 bitrate= 899.7kbits/s speed=1.04x
2 Past duration 0.656136 too large
3 Past duration 0.604195 too large
4 Past duration 0.601387 too large 8512kB time=00:01:17.46 bitrate= 900.2kbits/s speed=1.04x
Und dann, wenn das kommt, taucht man im ersten Fenster auf, also im
ffmpeg die Eingabe:
1 Stream mapping:
2 Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
3 Stream #0:1 -> #1:0 (aac (native) -> pcm_s16le (native))
4 Press [q] to stop, [?] for help
5 frame= 9 fps=0.0 q=-0.0 size=N/A time=00:00:00.36 bitrate=N/A dup=1 drop=0 spframe= 21 fps= 21 q=-0.0 size=N/A time=00:00:00.84 bitrate=N/A dup=1 drop=0 sp[alsa @ 0x5643b3293160] ALSA buffer xrun.
6 Last message repeated 1 times
7 frame= 33 fps= 22 q=-0.0 size=N/A time=00:00:01.32 bitrate=N/A dup=1 drop=0 sp[alsa @ 0x5643b3293160] ALSA buffer xrun.
8 Last message repeated 1 times
9 frame= 46 fps= 23 q=-0.0 size=N/A time=00:00:01.84 bitrate=N/A dup=1 drop=0 spframe= 58 fps= 23 q=-0.0 size=N/A time=00:00:02.32 bitrate=N/A dup=1 drop=0 spframe= 71 fps= 24 q=-0.0 size=N/A time=00:00:02.84 bitrate=N/A dup=1 drop=0 spframe= 83 fps= 24 q=-0.0 size=N/A time=00:00:03.32 bitrate=N/A dup=1 drop=0 sp[alsa @ 0x5643b3293160] ALSA buffer xrun.
10 frame= 96 fps= 24 q=-0.0 size=N/A time=00:00:03.84 bitrate=N/A dup=1 drop=0 sp[alsa @ 0x5643b3293160] ALSA buffer xrun.
Der Sound ist dann absolut unsynchronisiert ...
Hat jemand einen Rat und kann mir helfen?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
Noch kein Account?
Die Registrierung ist kostenlos und dauert nur eine Minute.
Jetzt registrieren