
ffmpeg를 사용하여 hls 스트림을 rtmp 스트림으로 다시 스트리밍하려고 합니다.
예를 들면 다음과 같습니다.
ffmpeg -loglevel debug -re \
-i "https://hddn01.skylinewebcams.com/live.m3u8?a=c6kekc4h116t1m5jbtei273bq0" \
-bufsize 4000k -preset ultrafast -vcodec libx264 -tune zerolatency \
-b:v 900k -an -f flv rtmp://127.0.0.1/live/stream.flv
스트리밍은 다음 웹사이트에서 볼 수 있습니다. https://www.skylinewebcams.com/en/webcam/malta/malta/traffic/traffic-cam2.html
문제는 입력 fps
값이 매우 낮고 q
대부분의 경우 값이 매우 높거나 -1이라는 것입니다.
다음 로그를 살펴보십시오.
ffmpeg version 3.4.2-1~16.04.york0.2 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 20160609
configuration: --prefix=/usr --extra-version='1~16.04.york0.2' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avi
synth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --e
nable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --e
nable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi
--enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
[hls,applehttp @ 0x5649bd7463e0] Opening 'https://hddn01.skylinewebcams.com/03042101ANC5-1544185331502.ts' for reading
[hls,applehttp @ 0x5649bd7463e0] Could not find codec parameters for stream 1 (Audio: aac ([15][0][0][0] / 0x000F), 0 channels, fltp): unspecified sample rate
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, hls,applehttp, from 'https://hddn01.skylinewebcams.com/live.m3u8?a=c6kekc4h116t1m5jbtei273bq0':
Duration: N/A, start: 22431.033000, bitrate: N/A
Program 0
Metadata:
variant_bitrate : 0
Stream #0:0: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1280x1024, 12 fps, 12 tbr, 90k tbn, 180k tbc
Metadata:
variant_bitrate : 0
Stream #0:1: Audio: aac ([15][0][0][0] / 0x000F), 0 channels, fltp
Metadata:
variant_bitrate : 0
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x5649bdc1ba80] VBV maxrate unspecified, assuming CBR
[libx264 @ 0x5649bdc1ba80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x5649bdc1ba80] profile Constrained Baseline, level 3.2
[libx264 @ 0x5649bdc1ba80] 264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - 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=4 lookahead_threads=4 sliced_threads=1 slices=4 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=12 scenecut=0 intra_refresh=0 rc_lookahead=0 rc=cbr mbtree=0 bitrate=900 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=900 vbv_bufsize=4000 nal_hrd=none filler=0 ip_ratio=1.40 aq=0
Output #0, flv, to 'rtmp://127.0.0.1/live/dhruv.flv':
Metadata:
encoder : Lavf57.83.100
Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 1280x1024, q=-1--1, 900 kb/s, 12 fps, 1k tbn, 12 tbc
Metadata:
variant_bitrate : 0
encoder : Lavc57.107.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/900000 buffer size: 4000000 vbv_delay: -1
[hls,applehttp @ 0x5649bd7463e0] Opening 'https://hddn01.skylinewebcams.com/03042101ANC5-1544185339480.ts' for reading
[hls,applehttp @ 0x5649bd7463e0] Opening 'https://hddn01.skylinewebcams.com/03042101ANC5-1544185347525.ts' for reading
[hls,applehttp @ 0x5649bd7463e0] Opening 'https://hddn01.skylinewebcams.com/03042101ANC5-1544185355483.ts' for reading
[hls,applehttp @ 0x5649bd7463e0] Opening 'https://hddn01.skylinewebcams.com/03042101ANC5-1544185363466.ts' for reading
[hls,applehttp @ 0x5649bd7463e0] Opening 'https://hddn01.skylinewebcams.com/03042101ANC5-1544185371496.ts' for reading
[flv @ 0x5649bdc1aae0] Failed to update header with correct duration.939.0kbits/s speed=0.991x
[flv @ 0x5649bdc1aae0] Failed to update header with correct filesize.
frame= 552 fps= 12 q=33.0 Lsize= 5261kB time=00:00:45.91 bitrate= 938.6kbits/s speed=0.992x
- 실시간 스트리밍하는 방법 아시는 분 계신가요?
답변1
동적으로 생성된 이 HLS 스트림은 JS 기반 DRM 시스템을 사용합니다. 페이지가 열려 있고 하트비트를 보내는 동안에만 m3u8이 새로 고쳐집니다(따라서 스트림 재생). 이러한 하트비트가 중지되면 m3u8 파일이 정적이 되어 시간이 지남에 따라 FPS 수가 점점 줄어들게 됩니다.
나는 이 체계가 이미지를 다시 스트리밍하는 것을 더 어렵게 만들기 위해 사용되었다고 가정합니다.
답변2
플래그 없이 시도해 보세요 -re
. ffmpeg
실시간 속도로 입력을 읽어야 하므로 예정된 세그먼트를 미리 다운로드하지 못해 원하지 않는 지연이 발생하는 것을 방지 합니다 ffmpeg
.
세그먼트 가 사용 가능해지면 즉시 별도의 스레드에 세그먼트를 다운로드하도록 -thread_queue_size
플래그를 설정해 볼 수도 있습니다 .ffmpeg
답변3
이는 저렴한 버팔로 웹캠(UVC) 스트리밍 HLS와 완벽하게 작동합니다. 그리고 로컬 VLC(PC의 VLC일 수 있음)를 확인하세요.
- 이 bash 스크립트를 실행하기 위해 미리 m3u8 파일과 ts 파일을 넣을 수 있도록 [one] 디렉터리를 만듭니다.
#!/bin/bash
HTTPDIR=/localhost #(might be /var/www/.....)
cd $HTTPDIR
sudo ffmpeg -f alsa -thread_queue_size 3524 -i hw:1 -i /dev/video0 -video_size 1280x720 -f rtsp -input_format YUY2 -video_size 1280x720 -vf fps=100 -vcodec libx264 -video_track_timescale 100 -subq 6 -me_range 16 -b:v 2500k -g 24 -c:a aac -ab 1840 -bufsize 512k -f hls -hls_time 7 -hls_list_size 8 -hls_allow_cache 0 -hls_segment_filename $HTTPDIR/one/stream_%d.ts -hls_flags delete_segments $HTTPDIR/oen/playlist.m3u8
이것은 또한 옵션 없이도 매력처럼 작동합니다.-video_track_timescale 100 -subq 6 -me_range 16
설정하면-ab 1840
(오디오 비트 전송률)이 124처럼 너무 낮으면 소리가 고르지 않게 됩니다.
웹캠을 확인하세요-video_size
그리고-input_format
, 입력하여ffprobe /dev/video0
.
그런 다음 ffmpeg 명령에 동일하게 입력하십시오.
모두 완료되었습니다. 이것이 ffmpeg 문제로 짜증나는 모든 사람에게 도움이 되기를 바랍니다!!(OvOY