NEWS
Internet/Webcamstream als Video speichern
-
Tag,
heutiges Projekt soll sein ein Video aus einem Livestream aus dem Internet lokal als mpg o.Ä. zu speichern.Als Quelle dient mir (z.B.)
https://v.angelcam.com/iframe?v=91yxkbo9ro&
Einen Screenshot aufzunehmen habe ich per ioBroker und dem Adapter Puppeteer erfolgreich lösen können.
Nun bin ich aber neugierig ob man eben auch ein Video speichern kann - hab mit Webcams usw noch keine bis wenig Erfahrung.
Merci für Tipps
-
Hier ein Minimalansatz:
- ffmpeg installieren (apt install ffmpeg)
- mit diesen Parametern starten:
ffmpeg -i https://e1-eu8.angelcam.com/cameras/102191/streams/hls/playlist.m3u8?token=eyJjYW1lcmFfaWQiOiIxMDIxOTEiLCJkZXZpY2VfaWQiOiIxMDIxOTEiLCJ0aW1lIjoxNzE0MDM4NDAyMjg3Mzg4LCJ0aW1lb3V0IjozNjAwfQ%3D%3D%2E08cb4fc3f6213e3ebe290cfb741c943bf9ed8a3ce6a1cbc929d6f1b8c4952e56 -t 5 -vcodec copy -acodec copy -y /tmp/OUT0.mp4
Über den Parameter "-t ..." kannst du die Länge in Sekunden festlegen.
Allerdings siehst du, dass der Stream mit einem Token geschützt ist. Diesen muss man sich aus den Browser-Quelltextdaten rausfischen. k.A, wie lange der funktioniert.
Bei mir lief es:
EDIT: über vcodec und acodec könntest du den Stream auch noch in andere Formate transformieren, aber ich denke das ist klar. In der o.a. Form wird der Stream 1:1 in die Datei geschrieben.
-
@marc-berg super erstmal und 1000 Dank !
Meine Commandline gibt mir allerdings folgendes aus
marc@ioBrokerBookworm:~$ ffmpeg -i https://e1-eu8.angelcam.com/cameras/102191/streams/hls/playlist.m3u8?token=eyJjYW1lcmFfaWQiOiIxMDIxOTEiLCJkZXZpY2VfaWQiOiIxMDIxOTEiLCJ0aW1lIjoxNzE0MDM3MTk1NjY4NzUyLCJ0aW1lb3V0IjozNjAwfQ%3D%3D.3adf959cca12f509b6c812988344987b50a76b4c2f50a2b6373c465c5d6ee892 -t 5 -vcodec copy -acodec copy -y /tmp/test.mp4 ffmpeg version 5.1.4-0+deb12u1 Copyright (c) 2000-2023 the FFmpeg developers built with gcc 12 (Debian 12.2.0-14) configuration: --prefix=/usr --extra-version=0+deb12u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared libavutil 57. 28.100 / 57. 28.100 libavcodec 59. 37.100 / 59. 37.100 libavformat 59. 27.100 / 59. 27.100 libavdevice 59. 7.100 / 59. 7.100 libavfilter 8. 44.100 / 8. 44.100 libswscale 6. 7.100 / 6. 7.100 libswresample 4. 7.100 / 4. 7.100 libpostproc 56. 6.100 / 56. 6.100 [hls @ 0x55d2c2041dc0] Skip ('#EXT-X-VERSION:3') [hls @ 0x55d2c2041dc0] Skip ('#EXT-X-DISCONTINUITY-SEQUENCE:4844') [hls @ 0x55d2c2041dc0] Opening 'https://e1-eu8.angelcam.com/cameras/102191/streams/hls/streaming-master-m2-eu8/segment-260975.ts' for reading [hls @ 0x55d2c2041dc0] Opening 'https://e1-eu8.angelcam.com/cameras/102191/streams/hls/streaming-master-m2-eu8/segment-260976.ts' for reading [NULL @ 0x55d2c26b80c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] decode_slice_header error [h264 @ 0x55d2c26e47c0] no frame! [NULL @ 0x55d2c26b80c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] decode_slice_header error [h264 @ 0x55d2c26e47c0] no frame! [NULL @ 0x55d2c26b80c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] decode_slice_header error [h264 @ 0x55d2c26e47c0] no frame! [NULL @ 0x55d2c26b80c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] decode_slice_header error [h264 @ 0x55d2c26e47c0] no frame! [NULL @ 0x55d2c26b80c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] decode_slice_header error [h264 @ 0x55d2c26e47c0] no frame! [NULL @ 0x55d2c26b80c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] decode_slice_header error [h264 @ 0x55d2c26e47c0] no frame! [NULL @ 0x55d2c26b80c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] decode_slice_header error [h264 @ 0x55d2c26e47c0] no frame! [NULL @ 0x55d2c26b80c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] decode_slice_header error [h264 @ 0x55d2c26e47c0] no frame! [NULL @ 0x55d2c26b80c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] decode_slice_header error [h264 @ 0x55d2c26e47c0] no frame! [NULL @ 0x55d2c26b80c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] non-existing PPS 0 referenced [h264 @ 0x55d2c26e47c0] decode_slice_header error [h264 @ 0x55d2c26e47c0] no frame! Input #0, hls, from 'https://e1-eu8.angelcam.com/cameras/102191/streams/hls/playlist.m3u8?token=eyJjYW1lcmFfaWQiOiIxMDIxOTEiLCJkZXZpY2VfaWQiOiIxMDIxOTEiLCJ0aW1lIjoxNzE0MDM3MTk1NjY4NzUyLCJ0aW1lb3V0IjozNjAwfQ%3D%3D.3adf959cca12f509b6c812988344987b50a76b4c2f50a2b6373c465c5d6ee892': Duration: N/A, start: 21649.723867, bitrate: N/A Program 0 Metadata: variant_bitrate : 0 Stream #0:0: Audio: aac (LC) ([15][0][0][0] / 0x000F), 32000 Hz, mono, fltp Metadata: variant_bitrate : 0 Stream #0:1: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuvj420p(pc, bt709), 1280x720, 10 fps, 25 tbr, 90k tbn Metadata: variant_bitrate : 0 Output #0, mp4, to '/tmp/test.mp4': Metadata: encoder : Lavf59.27.100 Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1280x720, q=2-31, 10 fps, 25 tbr, 90k tbn Metadata: variant_bitrate : 0 Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 32000 Hz, mono, fltp Metadata: variant_bitrate : 0 Stream mapping: Stream #0:1 -> #0:0 (copy) Stream #0:0 -> #0:1 (copy) Press [q] to stop, [?] for help frame= 40 fps=0.0 q=-1.0 Lsize= 220kB time=00:00:05.02 bitrate= 358.7kbits/s speed=3.89e+03x video:179kB audio:39kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.960948%
Da scheint bei mir noch ein kleiner Wurm zu sein
-
@djmarc75 sagte in Internet/Webcamstream als Video speichern:
Meine Commandline gibt mir allerdings folgendes aus
Ich denke, du musst dir deinen eigenen Token rausfummeln.
-
@marc-berg sagte in Internet/Webcamstream als Video speichern:
Ich denke, du musst dir deinen eigenen Token rausfummeln
Hab ich aber keinen Erfolg erzielt.
Muss heute Abend nochmal in mich gehen
-
@djmarc75 sagte in Internet/Webcamstream als Video speichern:
Hab ich aber keinen Erfolg erzielt.
Die gleichen Fehlermeldungen kommen bei mir auch, trotzdem wird das File geschrieben. Ich denke das liegt daran, dass man in einen laufenden Stream einsteigt und das Keyframe fehlt. Sobald nach 1-2 sek das erste Keyframe empfangen wurde, werden die Videodaten sauber ins mp4-File übernommen.
-
@marc-berg sagte in Internet/Webcamstream als Video speichern:
werden die Videodaten sauber ins mp4-File übernommen
vll liegts auch an iwelchen Berechtigungen bei mir ?
Läuft nämlich auch sauber durch aber ich sehe kein mp4 bei mir. (Ordner zum Schreiben geändert)
marc@ioBrokerBookworm:~$ ffmpeg -i https://e1-eu8.angelcam.com/cameras/102191/streams/hls/playlist.m3u8?token=eyJjYW1lcmFfaWQiOiIxMDIxOTEiLCJkZXZpY2VfaWQiOiIxMDIxOTEiLCJ0aW1lIjoxNzE0MDQyNTEwMTAzMDU3LCJ0aW1lb3V0IjozNjAwfQ%3D%3D%2Eeb99571d3ce90394e12faa6dc215acd6aa67fab82aae3b4ba2c58ab41cf6eec9 -t 5 -vcodec copy -acodec copy -y /opt/iobroker/mp4/test.mp4 ffmpeg version 5.1.4-0+deb12u1 Copyright (c) 2000-2023 the FFmpeg developers built with gcc 12 (Debian 12.2.0-14) configuration: --prefix=/usr --extra-version=0+deb12u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared libavutil 57. 28.100 / 57. 28.100 libavcodec 59. 37.100 / 59. 37.100 libavformat 59. 27.100 / 59. 27.100 libavdevice 59. 7.100 / 59. 7.100 libavfilter 8. 44.100 / 8. 44.100 libswscale 6. 7.100 / 6. 7.100 libswresample 4. 7.100 / 4. 7.100 libpostproc 56. 6.100 / 56. 6.100 [hls @ 0x55942930bdc0] Skip ('#EXT-X-VERSION:3') [hls @ 0x55942930bdc0] Skip ('#EXT-X-DISCONTINUITY-SEQUENCE:4844') [hls @ 0x55942930bdc0] Opening 'https://e1-eu8.angelcam.com/cameras/102191/streams/hls/streaming-master-m2-eu8/segment-262356.ts' for reading [hls @ 0x55942930bdc0] Opening 'https://e1-eu8.angelcam.com/cameras/102191/streams/hls/streaming-master-m2-eu8/segment-262357.ts' for reading Input #0, hls, from 'https://e1-eu8.angelcam.com/cameras/102191/streams/hls/playlist.m3u8?token=eyJjYW1lcmFfaWQiOiIxMDIxOTEiLCJkZXZpY2VfaWQiOiIxMDIxOTEiLCJ0aW1lIjoxNzE0MDQyNTEwMTAzMDU3LCJ0aW1lb3V0IjozNjAwfQ%3D%3D%2Eeb99571d3ce90394e12faa6dc215acd6aa67fab82aae3b4ba2c58ab41cf6eec9': Duration: N/A, start: 29935.706867, bitrate: N/A Program 0 Metadata: variant_bitrate : 0 Stream #0:0: Audio: aac (LC) ([15][0][0][0] / 0x000F), 32000 Hz, mono, fltp Metadata: variant_bitrate : 0 Stream #0:1: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuvj420p(pc, bt709), 1280x720, 10 fps, 25 tbr, 90k tbn Metadata: variant_bitrate : 0 Output #0, mp4, to '/opt/iobroker/mp3/test.mp4': Metadata: encoder : Lavf59.27.100 Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1280x720, q=2-31, 10 fps, 25 tbr, 90k tbn Metadata: variant_bitrate : 0 Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 32000 Hz, mono, fltp Metadata: variant_bitrate : 0 Stream mapping: Stream #0:1 -> #0:0 (copy) Stream #0:0 -> #0:1 (copy) Press [q] to stop, [?] for help frame= 50 fps=0.0 q=-1.0 Lsize= 377kB time=00:00:05.02 bitrate= 615.4kbits/s speed=1.32e+03x video:336kB audio:39kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.637988%
-
@djmarc75 sagte in Internet/Webcamstream als Video speichern:
vll liegts auch an iwelchen Berechtigungen bei mir ?
Wenn ich einen Ordner nutze, bei dem die Rechte fehlen, bekomme ich auch eine saubere Fehlermeldung:
Input #0, hls, from 'https://e1-eu8.angelcam.com/cameras/102191/streams/hls/playlist.m3u8?token=eyJjYW1lcmFfaWQiOiIxMDIxOTEiLCJkZXZpY2VfaWQiOiIxMDIxOTEiLCJ0aW1lIjoxNzE0MDQ4MDc4OTE2MDAxLCJ0aW1lb3V0IjozNjAwfQ%3D%3D%2Ef059aaf225fc54f6b2ad6267a0c893da763a9aa050952a46c97781f800184e18': Duration: N/A, start: 31879.706867, bitrate: N/A Program 0 Metadata: variant_bitrate : 0 Stream #0:0: Audio: aac (LC) ([15][0][0][0] / 0x000F), 32000 Hz, mono, fltp Metadata: variant_bitrate : 0 Stream #0:1: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuvj420p(pc, bt709), 1280x720, 25 tbr, 90k tbn, 20 tbc Metadata: variant_bitrate : 0 /tmp/OUT1.mp4: Permission denied