mpv version and platform
mpv-x86_64-20180331-git-e3e2c79.7z
by shinichiro, Win 10 64-bit
mpv 0.28.0-420-ge3e2c794ef Copyright © 2000-2018 mpv/MPlayer/mplayer2 projects
built on Sat Mar 31 03:31:15 UTC 2018
ffmpeg library versions:
libavutil 56.12.100
libavcodec 58.16.100
libavformat 58.10.100
libswscale 5.0.102
libavfilter 7.13.100
libswresample 3.0.101
ffmpeg version: N-45612-gcdd6a525e4
Reproduction steps
Haven’t tried/not sure how to go about crafting such a m3u8 stream. The URL in the logs is a stream of a TV channel. The error occurs very sporadically. I suspect it is a load balancing scheme.
Expected behavior
mpv does not crash, the stream plays as normal.
Actual behavior
mpv crashes because it tries to do ff_http_do_new_request
with a new URL in libavformat/http.c
.
Log file
λ mpv.com "http://live-ws-hls.huomaotv.cn/live/jade/playlist.m3u8"
Playing: http://live-ws-hls.huomaotv.cn/live/jade/playlist.m3u8
[ytdl_hook] youtube-dl failed, trying to play URL directly ...
(+) Video --vid=1 (h264 1920x1080 25.000fps)
(+) Audio --aid=1 (aac 2ch 48000Hz)
AO: [wasapi] 48000Hz stereo 2ch float
VO: [gpu] 1920x1080 yuv420p
AV: 00:02:48 / 00:02:55 (95%) A-V: 0.000 Cache: 7s+3MB
[osd/libass] fontselect: Using default font family: (Source Sans Pro, 400, 0) -> ArialMT, 0, ArialMT
[osd/libass] fontselect: Using default font family: (Source Sans Pro, 700, 0) -> Arial-BoldMT, 0, Arial-BoldMT
AV: 00:02:54 / 00:02:59 (96%) A-V: 0.000 Cache: 5s+1MB
[ffmpeg/demuxer] hls,applehttp: keepalive request failed for 'http://live-ws-hls.huomaotv.cn/live/jade/717653.ts?wsApp=HLS&wsMonitor=-1', retrying with new connection: Error number -10053 occurred
AV: 00:04:27 / 00:04:31 (98%) A-V: 0.000 Cache: 4s+1MB
[ffmpeg/demuxer] hls,applehttp: keepalive request failed for 'http://live-ws-hls.huomaotv.cn/live/jade/717683.ts?wsApp=HLS&wsMonitor=-1', retrying with new connection: Error number -10054 occurred
AV: 00:05:34 / 00:05:35 (99%) A-V: 0.000 Cache: 1s+522KB
[ffmpeg/demuxer] hls,applehttp: keepalive request failed for 'http://live-ws-hls.huomaotv.cn/live/jade/717705.ts?wsApp=HLS&wsMonitor=-1', retrying with new connection: Error number -10053 occurred
AV: 00:05:34 / 00:05:35 (99%) A-V: 0.000 Cache: 1s+509KB
[ffmpeg] http: Cannot reuse HTTP connection for different host: live-ws-hls.huomaotv.cn:-1 != live-ws.huomaotv.cn:-1
[ffmpeg/demuxer] hls,applehttp: keepalive request failed for 'http://live-ws.huomaotv.cn/live/jade/playlist.m3u8?wsSession=b0283807b06e4b5af98ceb13-152257154003850&wsIPSercert=ae822ef602aea485e85d54d289838892&wsMonitor=-1', retrying with new connection: Invalid argument
AV: 00:05:34 / 00:05:35 (99%) A-V: 0.000 Cache: 1s+430KB
[mpv has stopped working]
Sample files
The m3u8 I’m playing occasionally points to another m3u8 link altogether (note the second to last try). This can sometimes be observed if I repeatedly curl
it.
$ curl "http://live-ws-hls.huomaotv.cn/live/jade/playlist.m3u8"
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:31389
#EXTINF:3.995
717350.ts?wsApp=HLS&wsMonitor=-1
#EXTINF:3.984
717351.ts?wsApp=HLS&wsMonitor=-1
#EXTINF:3.995
717353.ts?wsApp=HLS&wsMonitor=-1
$ curl "http://live-ws-hls.huomaotv.cn/live/jade/playlist.m3u8"
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:31389
#EXTINF:3.995
717350.ts?wsApp=HLS&wsMonitor=-1
#EXTINF:3.984
717351.ts?wsApp=HLS&wsMonitor=-1
#EXTINF:3.995
717353.ts?wsApp=HLS&wsMonitor=-1
$ curl "http://live-ws-hls.huomaotv.cn/live/jade/playlist.m3u8"
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:31389
#EXTINF:3.995
717350.ts?wsApp=HLS&wsMonitor=-1
#EXTINF:3.984
717351.ts?wsApp=HLS&wsMonitor=-1
#EXTINF:3.995
717353.ts?wsApp=HLS&wsMonitor=-1
$ curl "http://live-ws-hls.huomaotv.cn/live/jade/playlist.m3u8"
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1468000
http://live-ws.huomaotv.cn/live/jade/playlist.m3u8?wsSession=b0283807b06e4b5af98ceb13-152257049166526&wsIPSercert=0f57dbdf6365c007136a361fe080be63&wsMonitor=-1
$ curl "http://live-ws-hls.huomaotv.cn/live/jade/playlist.m3u8"
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:31390
#EXTINF:3.984
717351.ts?wsApp=HLS&wsMonitor=-1
#EXTINF:3.995
717353.ts?wsApp=HLS&wsMonitor=-1
#EXTINF:3.984
717354.ts?wsApp=HLS&wsMonitor=-1
ffmpeg -re -i /tmp/VIDEO2findingnews.mp4 -preset ultrafast -acodec aac -strict -2 -vcodec libx264 -f flv rtmp://wcs5-eu.flashphoner.com/live/str2
ffmpeg version 3.2.3 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-11)
configuration: --enable-shared --disable-logging --enable-gpl --enable-pthreads --enable-libx264 --enable-librtmp --disable-yasm
libavutil 55. 34.101 / 55. 34.101
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.101 / 57. 56.101
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/tmp/VIDEO2findingnews.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp42mp41
creation_time : 2011-10-07T15:54:24.000000Z
Duration: 00:03:06.28, start: 0.000000, bitrate: 1571 kb/s
Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt709), 640x360, 1407 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
Metadata:
creation_time : 2011-10-07T15:54:24.000000Z
handler_name : Apple Video Media Handler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 159 kb/s (default)
Metadata:
creation_time : 2011-10-07T15:54:24.000000Z
handler_name : Apple Sound Media Handler
[libx264 @ 0x1c5b8c0] using cpu capabilities: none!
[libx264 @ 0x1c5b8c0] profile Constrained Baseline, level 3.0
[libx264 @ 0x1c5b8c0] 264 - core 148 - 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=3 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
Output #0, flv, to 'rtmp://wcs5-eu.flashphoner.com/live/str2':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp42mp41
encoder : Lavf57.56.101
Stream #0:0(eng): Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 640x360, q=-1--1, 25 fps, 1k tbn, 25 tbc (default)
Metadata:
creation_time : 2011-10-07T15:54:24.000000Z
handler_name : Apple Video Media Handler
encoder : Lavc57.64.101 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Stream #0:1(eng): Audio: aac (LC) ([10][0][0][0] / 0x000A), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time : 2011-10-07T15:54:24.000000Z
handler_name : Apple Sound Media Handler
encoder : Lavc57.64.101 aac
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
#1604
new
defect
Reported by: | Owned by: | ||
---|---|---|---|
Priority: | normal | Component: | undetermined |
Version: | git-master | Keywords: | rtmp |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Summary of the bug: Rtmp output to justin.tv fps continually drops, the 64 bit version slowly uses all system ram (8 GB). It goes up by 100 MB every second or two until the ram is full. The audio is fine even with the low frame rate. If I change «-f flv rtmp:xxxx» to «f:test.mp4» to record to a hard drive, it works perfect. This problem only occurs when I’m trying to stream. It happens for both file input and direct show input. My cpu is an Intel 3770k at 4.4 GHz and cable upload is 3 Mb/s. Both are more than capable of handling 1280×720 at 30fps and 2400kb/s.
How to reproduce:
ffmpeg -re -rtbufsize 100000k -i "f:xxxxxxxxxxxxxxxxxxxxxxxxxxxx" -pix_fmt yuv420p -s hd720 -vcodec libx264 -preset medium -b:v 2400k -maxrate 240 0k -bufsize 600k -acodec libmp3lame -ac 2 -b:a 128k -ar 44100 -f flv "rtmp://liv e-dfw.justin.tv/app/xxxxxxxxxxxxxxxxxxxxx flashver=FME/2.5 (compatible; FMSc 1.0 )" ffmpeg version N-43060-ga85b4a5 Copyright (c) 2000-2012 the FFmpeg developers built on Jul 30 2012 13:14:08 with gcc 4.7.1 (GCC) configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-ru ntime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable -libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libope njpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libth eora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable- libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --e nable-zlib libavutil 51. 66.100 / 51. 66.100 libavcodec 54. 45.100 / 54. 45.100 libavformat 54. 22.100 / 54. 22.100 libavdevice 54. 2.100 / 54. 2.100 libavfilter 3. 5.101 / 3. 5.101 libswscale 2. 1.100 / 2. 1.100 libswresample 0. 15.100 / 0. 15.100 libpostproc 52. 0.100 / 52. 0.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'f:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42isomavc1 encoder : HandBrake 0.9.5 2011010300 Duration: 01:39:15.71, start: 0.000000, bitrate: 4822 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x800 [SAR 1:1 DAR 12:5], 4179 kb/s, 23.98 fps, 23.98 tbr, 90k tbn, 180k tbc Stream #0:1(und): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, 5.1(side), s16, 640 kb/s [libx264 @ 0514f860] using SAR=27/20 [libx264 @ 0514f860] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE 4.2 AVX [libx264 @ 0514f860] profile High, level 3.1 [libx264 @ 0514f860] 264 - core 125 r2200 999b753 - H.264/MPEG-4 AVC codec - Cop yleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deb lock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 m e_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chro ma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=23 scene cut=40 intra_refresh=0 rc_lookahead=40 rc=cbr mbtree=1 bitrate=2400 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=2400 vbv_bufsize=600 nal_hrd=no ne ip_ratio=1.40 aq=1:1.00 Output #0, flv, to 'rtmp://live-dfw.justin.tv/app/xxxxxxxxxxxxxxxxxxxxx flashver =FME/2.5 (compatible; FMSc 1.0)': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42isomavc1 encoder : Lavf54.22.100 Stream #0:0(und): Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 1280x720 [SA R 27:20 DAR 12:5], q=-1--1, 2400 kb/s, 1k tbn, 23.98 tbc Stream #0:1(und): Audio: mp3 ([2][0][0][0] / 0x0002), 44100 Hz, stereo, s16, 128 kb/s Stream mapping: Stream #0:0 -> #0:0 (h264 -> libx264) Stream #0:1 -> #0:1 (ac3 -> libmp3lame) Press [q] to stop, [?] for help DTS -3754, next:-83406 st:0 invalid dropping frame= 4 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate= 0.0kbits/s frame= 15 fps= 15 q=0.0 size= 0kB time=00:00:00.00 bitrate= 0.0kbits/s frame= 27 fps= 17 q=0.0 size= 0kB time=00:00:00.00 bitrate= 0.0kbits/s frame= 40 fps= 19 q=0.0 size= 0kB time=00:00:00.00 bitrate= 0.0kbits/s frame= 51 fps= 20 q=0.0 size= 0kB time=00:00:00.00 bitrate= 0.0kbits/s frame= 67 fps= 22 q=0.0 size= 8kB time=00:00:00.37 bitrate= 172.5kbits/s frame= 76 fps= 21 q=0.0 size= 15kB time=00:00:00.75 bitrate= 161.4kbits/s frame= 87 fps= 21 q=0.0 size= 23kB time=00:00:01.21 bitrate= 153.9kbits/s frame= 103 fps= 22 q=0.0 size= 44kB time=00:00:01.87 bitrate= 192.1kbits/s frame= 112 fps= 22 q=0.0 size= 50kB time=00:00:02.25 bitrate= 183.5kbits/s frame= 123 fps= 22 q=0.0 size= 59kB time=00:00:02.71 bitrate= 177.6kbits/s frame= 130 fps= 21 q=10.0 size= 135kB time=00:00:03.00 bitrate= 367.5kbits/ frame= 141 fps= 21 q=37.0 size= 223kB time=00:00:03.46 bitrate= 528.9kbits/ frame= 147 fps= 20 q=38.0 size= 313kB time=00:00:03.71 bitrate= 690.7kbits/ frame= 155 fps= 20 q=30.0 size= 408kB time=00:00:04.04 bitrate= 825.6kbits/ frame= 167 fps= 20 q=36.0 size= 492kB time=00:00:04.54 bitrate= 885.6kbits/ frame= 174 fps= 20 q=37.0 size= 602kB time=00:00:04.83 bitrate=1019.8kbits/ frame= 182 fps= 19 q=36.0 size= 692kB time=00:00:05.17 bitrate=1096.3kbits/ frame= 191 fps= 19 q=37.0 size= 783kB time=00:00:05.54 bitrate=1156.8kbits/ frame= 197 fps= 19 q=36.0 size= 888kB time=00:00:05.79 bitrate=1254.4kbits/ frame= 203 fps= 18 q=35.0 size= 983kB time=00:00:06.04 bitrate=1331.5kbits/ frame= 211 fps= 18 q=34.0 size= 1063kB time=00:00:06.38 bitrate=1364.8kbits/ frame= 222 fps= 18 q=33.0 size= 1170kB time=00:00:06.84 bitrate=1401.4kbits/ frame= 231 fps= 18 q=34.0 size= 1272kB time=00:00:07.21 bitrate=1444.4kbits/ frame= 237 fps= 18 q=33.0 size= 1356kB time=00:00:07.46 bitrate=1488.0kbits/ frame= 247 fps= 18 q=32.0 size= 1460kB time=00:00:07.88 bitrate=1517.4kbits/ frame= 255 fps= 18 q=34.0 size= 1554kB time=00:00:08.21 bitrate=1548.9kbits/ frame= 262 fps= 18 q=34.0 size= 1643kB time=00:00:08.50 bitrate=1582.3kbits/ frame= 269 fps= 18 q=33.0 size= 1735kB time=00:00:08.80 bitrate=1615.2kbits/ frame= 277 fps= 18 q=33.0 size= 1823kB time=00:00:09.13 bitrate=1635.1kbits/ frame= 284 fps= 17 q=33.0 size= 1922kB time=00:00:09.42 bitrate=1670.1kbits/ frame= 293 fps= 17 q=32.0 size= 2004kB time=00:00:09.80 bitrate=1674.9kbits/ frame= 302 fps= 17 q=32.0 size= 2107kB time=00:00:10.17 bitrate=1696.5kbits/ frame= 307 fps= 17 q=32.0 size= 2195kB time=00:00:10.38 bitrate=1731.4kbits/ frame= 319 fps= 17 q=31.0 size= 2304kB time=00:00:10.88 bitrate=1734.1kbits/ frame= 327 fps= 17 q=28.0 size= 2402kB time=00:00:11.22 bitrate=1754.0kbits/ frame= 335 fps= 17 q=28.0 size= 2498kB time=00:00:11.55 bitrate=1770.8kbits/ frame= 341 fps= 17 q=28.0 size= 2597kB time=00:00:11.80 bitrate=1802.5kbits/ frame= 351 fps= 17 q=26.0 size= 2677kB time=00:00:12.22 bitrate=1794.4kbits/ frame= 365 fps= 17 q=26.0 size= 2777kB time=00:00:12.80 bitrate=1776.6kbits/ frame= 375 fps= 17 q=27.0 size= 2880kB time=00:00:13.22 bitrate=1784.5kbits/ frame= 385 fps= 17 q=24.0 size= 2978kB time=00:00:13.63 bitrate=1788.7kbits/ frame= 395 fps= 17 q=28.0 size= 3117kB time=00:00:14.05 bitrate=1816.5kbits/ frame= 404 fps= 17 q=27.0 size= 3212kB time=00:00:14.43 bitrate=1823.1kbits/ frame= 410 fps= 17 q=28.0 size= 3304kB time=00:00:14.68 bitrate=1843.7kbits/ frame= 418 fps= 17 q=25.0 size= 3414kB time=00:00:15.01 bitrate=1862.5kbits/ frame= 426 fps= 17 q=25.0 size= 3490kB time=00:00:15.34 bitrate=1862.8kbits/ frame= 437 fps= 17 q=20.0 size= 3597kB time=00:00:15.80 bitrate=1864.1kbits/ frame= 442 fps= 17 q=15.0 size= 3680kB time=00:00:16.01 bitrate=1882.4kbits/ frame= 450 fps= 17 q=12.0 size= 3761kB time=00:00:16.35 bitrate=1884.4kbits/ frame= 458 fps= 17 q=13.0 size= 3857kB time=00:00:16.68 bitrate=1893.8kbits/ frame= 467 fps= 17 q=12.0 size= 3945kB time=00:00:17.05 bitrate=1894.6kbits/ frame= 479 fps= 17 q=8.0 size= 4029kB time=00:00:17.56 bitrate=1879.6kbits/s frame= 490 fps= 17 q=23.0 size= 4129kB time=00:00:18.01 bitrate=1877.5kbits/ frame= 497 fps= 17 q=28.0 size= 4235kB time=00:00:18.30 bitrate=1895.0kbits/ frame= 503 fps= 17 q=28.0 size= 4336kB time=00:00:18.56 bitrate=1913.7kbits/ frame= 511 fps= 17 q=27.0 size= 4412kB time=00:00:18.89 bitrate=1912.9kbits/ frame= 518 fps= 17 q=27.0 size= 4495kB time=00:00:19.18 bitrate=1919.4kbits/ frame= 526 fps= 17 q=26.0 size= 4583kB time=00:00:19.52 bitrate=1923.5kbits/ frame= 534 fps= 17 q=29.0 size= 4676kB time=00:00:19.85 bitrate=1929.5kbits/ frame= 543 fps= 17 q=32.0 size= 4778kB time=00:00:20.22 bitrate=1934.8kbits/ frame= 549 fps= 17 q=31.0 size= 4868kB time=00:00:20.47 bitrate=1947.3kbits/ frame= 557 fps= 16 q=32.0 size= 4960kB time=00:00:20.81 bitrate=1952.2kbits/ frame= 565 fps= 16 q=31.0 size= 5055kB time=00:00:21.14 bitrate=1958.4kbits/ frame= 571 fps= 16 q=30.0 size= 5135kB time=00:00:21.39 bitrate=1966.0kbits/ frame= 578 fps= 16 q=28.0 size= 5236kB time=00:00:21.68 bitrate=1977.6kbits/ frame= 586 fps= 16 q=26.0 size= 5325kB time=00:00:22.02 bitrate=1981.1kbits/ frame= 594 fps= 16 q=25.0 size= 5426kB time=00:00:22.35 bitrate=1988.1kbits/ frame= 602 fps= 16 q=23.0 size= 5525kB time=00:00:22.69 bitrate=1994.7kbits/ frame= 609 fps= 16 q=23.0 size= 5617kB time=00:00:22.98 bitrate=2002.3kbits/ frame= 615 fps= 16 q=22.0 size= 5697kB time=00:00:23.23 bitrate=2008.8kbits/ frame= 623 fps= 16 q=22.0 size= 5784kB time=00:00:23.56 bitrate=2010.6kbits/ frame= 634 fps= 16 q=21.0 size= 5898kB time=00:00:24.02 bitrate=2011.1kbits/ frame= 643 fps= 16 q=23.0 size= 5981kB time=00:00:24.40 bitrate=2008.1kbits/ frame= 651 fps= 16 q=21.0 size= 6071kB time=00:00:24.73 bitrate=2010.9kbits/ frame= 657 fps= 16 q=20.0 size= 6170kB time=00:00:24.98 bitrate=2023.2kbits/ frame= 666 fps= 16 q=21.0 size= 6270kB time=00:00:25.35 bitrate=2025.6kbits/ frame= 675 fps= 16 q=20.0 size= 6350kB time=00:00:25.73 bitrate=2021.6kbits/ frame= 685 fps= 16 q=20.0 size= 6444kB time=00:00:26.15 bitrate=2018.7kbits/ frame= 693 fps= 16 q=15.0 size= 6532kB time=00:00:26.48 bitrate=2020.4kbits/ frame= 703 fps= 16 q=20.0 size= 6622kB time=00:00:26.90 bitrate=2016.7kbits/ frame= 712 fps= 16 q=21.0 size= 6715kB time=00:00:27.27 bitrate=2016.7kbits/ frame= 719 fps= 16 q=20.0 size= 6798kB time=00:00:27.57 bitrate=2020.1kbits/ frame= 727 fps= 16 q=16.0 size= 6890kB time=00:00:27.90 bitrate=2023.0kbits/ frame= 738 fps= 16 q=20.0 size= 6980kB time=00:00:28.36 bitrate=2016.0kbits/ frame= 746 fps= 16 q=18.0 size= 7089kB time=00:00:28.69 bitrate=2023.7kbits/ frame= 758 fps= 15 q=13.0 Lsize= 7879kB time=00:00:31.53 bitrate=2047.0kbits /s video:7350kB audio:496kB subtitle:0 global headers:0kB muxing overhead 0.436182% [libx264 @ 0514f860] frame I:23 Avg QP:18.98 size: 22743 [libx264 @ 0514f860] frame P:498 Avg QP:24.53 size: 12099 [libx264 @ 0514f860] frame B:237 Avg QP:16.09 size: 4121 [libx264 @ 0514f860] consecutive B-frames: 48.8% 27.4% 3.2% 20.6% [libx264 @ 0514f860] mb I I16..4: 41.8% 47.4% 10.8% [libx264 @ 0514f860] mb P I16..4: 19.6% 10.0% 1.0% P16..4: 28.3% 7.3% 3.2% 0.0% 0.0% skip:30.6% [libx264 @ 0514f860] mb B I16..4: 0.4% 0.2% 0.0% B16..8: 19.4% 4.2% 0.8% direct: 3.9% skip:71.0% L0:46.6% L1:48.0% BI: 5.4% [libx264 @ 0514f860] 8x8 transform intra:34.6% inter:82.7% [libx264 @ 0514f860] coded y,uvDC,uvAC intra: 27.7% 47.6% 13.5% inter: 17.2% 23. 4% 1.2% [libx264 @ 0514f860] i16 v,h,dc,p: 26% 71% 1% 1% [libx264 @ 0514f860] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 47% 21% 3% 3% 3% 3% 3% 3% [libx264 @ 0514f860] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 54% 10% 2% 3% 2% 4% 2% 3% [libx264 @ 0514f860] i8c dc,h,v,p: 64% 19% 11% 5% [libx264 @ 0514f860] Weighted P-Frames: Y:11.2% UV:7.6% [libx264 @ 0514f860] ref P L0: 55.7% 12.9% 20.2% 10.3% 0.8% [libx264 @ 0514f860] ref B L0: 76.7% 21.5% 1.8% [libx264 @ 0514f860] ref B L1: 95.4% 4.6% [libx264 @ 0514f860] kb/s:1896.70 ffmpeg version: Zeranoe 7-30-2012 version built on ... Jul 30 2012 (taken from the top of what I pasted)
Hello.
I need to convert RTSP stream to HTTP Video Stream, that Google Chrome browser could play.
I am newbie in such question, so I Googled this https://trac.ffmpeg.org/wiki/StreamingGuide and installed Emby server just now.
Now I see in Emby Server
Version 4.4.2.0
checkEmby Server is up to date
Running on http port 8096.
In-Home (LAN) access: http://192.168.31.11:8096
Remote (WAN) access: *******************
My RTSP is only in private LAN, so I Googled RTSP stream for tests too: rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa .
When I am running
ffmpeg -i "rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa" -preset ultrafast -vcodec libx264 -tune zerolatency -b 900k -f mpegts http://192.168.31.11:8096/
I see output with error
c:tempFFmpeg>ffmpeg -i "rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa" -preset ultrafast -vcodec libx264 -tune zerolatency -b 900k -f mpegts http://192.168.31.11:8096/ ffmpeg version git-2020-05-01-39fb1e9 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 9.3.1 (GCC) 20200328 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf libavutil 56. 43.100 / 56. 43.100 libavcodec 58. 82.100 / 58. 82.100 libavformat 58. 42.101 / 58. 42.101 libavdevice 58. 9.103 / 58. 9.103 libavfilter 7. 80.100 / 7. 80.100 libswscale 5. 6.101 / 5. 6.101 libswresample 3. 6.100 / 3. 6.100 libpostproc 55. 6.100 / 55. 6.100 Input #0, rtsp, from 'rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa': Metadata: title : 470011e600ef003a004ee33696235daa.stream Duration: N/A, start: 0.334000, bitrate: N/A Stream #0:0: Video: h264 (Baseline), yuv420p(progressive), 352x240, 14.99 tbr, 90k tbn, 180k tbc Please use -b:a or -b:v, -b is ambiguous Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264)) Press [q] to stop, [?] for help [libx264 @ 000001aa672b6180] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 [libx264 @ 000001aa672b6180] profile Constrained Baseline, level 2.0, 4:2:0, 8-bit Output #0, mpegts, to 'http://192.168.31.11:8096/': Metadata: title : 470011e600ef003a004ee33696235daa.stream encoder : Lavf58.42.101 Stream #0:0: Video: h264 (libx264), yuv420p, 352x240, q=-1--1, 900 kb/s, 14.99 fps, 90k tbn, 14.99 tbc Metadata: encoder : Lavc58.82.100 libx264 Side data: cpb: bitrate max/min/avg: 0/0/900000 buffer size: 0 vbv_delay: N/A av_interleaved_write_frame(): Unknown error Error writing trailer of http://192.168.31.11:8096/: Error number -10053 occurred frame= 1 fps=0.0 q=13.0 Lsize= 24kB time=00:00:00.00 bitrate=17637818.2kbits/s speed=0.00158x video:22kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 5.411397% [http @ 000001aa672b4480] URL read error: Error number -10053 occurred [libx264 @ 000001aa672b6180] frame I:1 Avg QP:13.00 size: 23007 [libx264 @ 000001aa672b6180] mb I I16..4: 100.0% 0.0% 0.0% [libx264 @ 000001aa672b6180] final ratefactor: 14.69 [libx264 @ 000001aa672b6180] coded y,uvDC,uvAC intra: 95.2% 45.8% 26.4% [libx264 @ 000001aa672b6180] i16 v,h,dc,p: 14% 42% 29% 15% [libx264 @ 000001aa672b6180] i8c dc,h,v,p: 66% 21% 10% 3% [libx264 @ 000001aa672b6180] kb/s:2758.08 Conversion failed! c:tempFFmpeg>
I also tried to pass auth params to server, but it didn’t solve the issue:
ffmpeg -i "rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa" -preset ultrafast -vcodec libx264 -tune zerolatency -b 900k -f mpegts http://root:qqqqqqq@192.168.31.11:8096/
ffmpeg version git-2020-05-01-39fb1e9 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 9.3.1 (GCC) 20200328 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf libavutil 56. 43.100 / 56. 43.100 libavcodec 58. 82.100 / 58. 82.100 libavformat 58. 42.101 / 58. 42.101 libavdevice 58. 9.103 / 58. 9.103 libavfilter 7. 80.100 / 7. 80.100 libswscale 5. 6.101 / 5. 6.101 libswresample 3. 6.100 / 3. 6.100 libpostproc 55. 6.100 / 55. 6.100 Input #0, rtsp, from 'rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa': Metadata: title : 470011e600ef003a004ee33696235daa.stream Duration: N/A, start: 0.600000, bitrate: N/A Stream #0:0: Video: h264 (Baseline), yuv420p(progressive), 352x240, 14.99 tbr, 90k tbn, 180k tbc Please use -b:a or -b:v, -b is ambiguous Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264)) Press [q] to stop, [?] for help [libx264 @ 0000020a43c46300] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 [libx264 @ 0000020a43c46300] profile Constrained Baseline, level 2.0, 4:2:0, 8-bit Output #0, mpegts, to 'http://root:qqqqqqq@192.168.31.11:8096/': Metadata: title : 470011e600ef003a004ee33696235daa.stream encoder : Lavf58.42.101 Stream #0:0: Video: h264 (libx264), yuv420p, 352x240, q=-1--1, 900 kb/s, 14.99 fps, 90k tbn, 14.99 tbc Metadata: encoder : Lavc58.82.100 libx264 Side data: cpb: bitrate max/min/avg: 0/0/900000 buffer size: 0 vbv_delay: N/A av_interleaved_write_frame(): Unknown error Error writing trailer of http://root:qqqqqqq@192.168.31.11:8096/: Error number -10053 occurred frame= 1 fps=0.0 q=13.0 Lsize= 24kB time=00:00:00.00 bitrate=17501090.9kbits/s speed=0.000115x video:22kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 5.202413% [http @ 0000020a43c46d80] URL read error: Error number -10053 occurred [libx264 @ 0000020a43c46300] frame I:1 Avg QP:13.00 size: 22874 [libx264 @ 0000020a43c46300] mb I I16..4: 100.0% 0.0% 0.0% [libx264 @ 0000020a43c46300] final ratefactor: 14.65 [libx264 @ 0000020a43c46300] coded y,uvDC,uvAC intra: 94.8% 47.6% 25.8% [libx264 @ 0000020a43c46300] i16 v,h,dc,p: 13% 43% 30% 14% [libx264 @ 0000020a43c46300] i8c dc,h,v,p: 62% 23% 13% 3% [libx264 @ 0000020a43c46300] kb/s:2742.14 Conversion failed! c:tempFFmpeg>
Can you tell me please, how to make HTTP video stream from RTSP stream with Emby server?
How may i stream with udp out multicast from Mpeg2-TS source (MPEGTS in)
Hi
i have a steam URL http://xxxxx in MPEGTS in and i would like output flow with udp multicast output
How may i do ?
Regards
Lorenzo 2019-01-24 22:25:14 UTC
Hi Denis,
Thanks for your reply
I have done and I have on my pc video on udp://@239.0.3.1:1234 but there is a new problem
There is many freezz image because with udp flow in the statistic of the video on VLC , the bitrate video incoming is variable and there many videos lost frames
Is there a solution to solve he issue?
Is there RTP multicast proocol on nimble?
Regards Lorenzo
Denis Slobodskoy 2019-01-25 02:55:23 UTC
Nimble send UDP stream with same rate as data comes in, I suppose your source MpegTS stream also has bitrate fluctuations. Unfortunately, there are no options to normalize bitrate, I could only recommend to translate stream by ffmpeg with -re parameter.
Sorry, RTP is not supported.
lorenzo 2019-01-25 09:21:59 UTC
Hi Denis,
but when I am connected on the MPEGTS out flow , I have no issue
How may i test with translate stream by ffmpeg?
regards
lorenzo 2019-01-26 14:04:01 UTC
Hi Denis,
i have lauch this
ffmpeg -re -stream_loop -1 -i http:/xxxxxxxx -c copy -f mpegts rtmp://192.168.1.96:1935/nimble_live/test
On the nimble serve its ready but no bandwith anf after few minutes
Press [q] to stop, [?] for help
av_interleaved_write_frame(): Unknown errortime=00:00:16.75 bitrate=8850.5kbits/s speed= 1x
Error writing trailer of rtmp://192.168.1.96:1935/nimble_live/test: Error number -10054 occurred
frame= 425 fps= 25 q=-1.0 Lsize= 18385kB time=00:00:16.95 bitrate=8880.7kbits/s speed=0.99x
video:16754kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 7.992247%
Conversion failed!
lorenzo 2019-01-26 14:04:01 UTC
Hi Denis,
i have lauch this
ffmpeg -re -stream_loop -1 -i http:/xxxxxxxx -c copy -f mpegts rtmp://192.168.1.96:1935/nimble_live/test
On the nimble serve its ready but no bandwith anf after few minutes
Press [q] to stop, [?] for help
av_interleaved_write_frame(): Unknown errortime=00:00:16.75 bitrate=8850.5kbits/s speed= 1x
Error writing trailer of rtmp://192.168.1.96:1935/nimble_live/test: Error number -10054 occurred
frame= 425 fps= 25 q=-1.0 Lsize= 18385kB time=00:00:16.95 bitrate=8880.7kbits/s speed=0.99x
video:16754kB audio:271kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 7.992247%
Conversion failed!
Denis Slobodskoy 2019-01-28 00:57:12 UTC
Try to remove «-stream_loop -1» parameter — it needed when you want to send some file repeatedly, it will not work for input live streams.
lorenzo 2019-01-28 09:54:44 UTC
Hi Denis,
thanks for your help.
1/ Ok i may test… this but i think -f mpegts with rtmp , you think it s possible?
2/ If i use
ffmpeg -re -i http:/xxxxxxxx -c copy -f mpegts udp://239.0.0.1:1234
I see normally i may put this source in MPEG-TS UDP setting ,
— in the line -f mpeg-ts udp…. May i specify a multicast adress ( or the nimble server or loopback because , i may read with VLC Locally but on other PC on the LAN i see the packet with wireshark but i cannot read Video
On th enimble server in MPEG-TS i have put 239.0.0.1 1234 but it not see the flow
Я хочу перекодировать большой файл с помощью FFMPEG и сохранить результат непосредственно в AWS S3. Это будет сделано внутри AWS Lambda с ограниченным пространством tmp, поэтому я не могу сохранить результат транскодирования локально, а затем загрузить его на S3 на втором этапе. Мне не хватит места в ТМП. Поэтому я хочу сохранить вывод FFMPEG непосредственно на S3.
Поэтому я создал предварительно подписанный URL-адрес S3, который позволяет «PUT»:
var outputPath = s3Client.GetPreSignedURL(new Amazon.S3.Model.GetPreSignedUrlRequest
{
BucketName = "my-bucket",
Expires = DateTime.UtcNow.AddMinutes(5),
Key = "output.mp3",
Verb = HttpVerb.PUT,
});
Затем я вызвал ffmpeg с полученным предварительно подписанным URL:
ffmpeg -i C:input.wav -y -vn -ar 44100 -ac 2 -ab 192k -f mp3 https://my-bucket.s3.amazonaws.com/output.mp3?AWSAccessKeyId=AKIAJDSGJWM63VQEXHIQ&Expires=1550427237&Signature=%2BE8Wc%2F%2FQYrvGxzc%2FgXnsvauKnac%3D
FFMPEG возвращает код выхода 1 со следующим выводом:
ffmpeg version N-93120-ga84af760b8 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20190212
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
libavutil 56. 26.100 / 56. 26.100
libavcodec 58. 47.100 / 58. 47.100
libavformat 58. 26.101 / 58. 26.101
libavdevice 58. 6.101 / 58. 6.101
libavfilter 7. 48.100 / 7. 48.100
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from 'C:input.wav':
Duration: 00:04:16.72, bitrate: 3072 kb/s
Stream #0:0: Audio: pcm_s32le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s32, 3072 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s32le (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to 'https://my-bucket.s3.amazonaws.com/output.mp3?AWSAccessKeyId=AKIAJDSGJWM63VQEXHIQ&Expires=1550427237&Signature=%2BE8Wc%2F%2FQYrvGxzc%2FgXnsvauKnac%3D':
Metadata:
TSSE : Lavf58.26.101
Stream #0:0: Audio: mp3 (libmp3lame), 44100 Hz, stereo, s32p, 192 kb/s
Metadata:
encoder : Lavc58.47.100 libmp3lame
size= 577kB time=00:00:24.58 bitrate= 192.2kbits/s speed=49.1x
size= 1109kB time=00:00:47.28 bitrate= 192.1kbits/s speed=47.2x
[tls @ 000001d73d786b00] Error in the push function.
av_interleaved_write_frame(): I/O error
Error writing trailer of https://my-bucket.s3.amazonaws.com/output.mp3?AWSAccessKeyId=AKIAJDSGJWM63VQEXHIQ&Expires=1550427237&Signature=%2BE8Wc%2F%2FQYrvGxzc%2FgXnsvauKnac%3D: I/O error
size= 1143kB time=00:00:48.77 bitrate= 192.0kbits/s speed= 47x
video:0kB audio:1144kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[tls @ 000001d73d786b00] The specified session has been invalidated for some reason.
[tls @ 000001d73d786b00] Error in the pull function.
[https @ 000001d73d784fc0] URL read error: -5
Conversion failed!
Как видите, у меня есть URL read error
. Это немного удивляет меня, так как я хочу выводить на этот URL, а не читать его.
Кто-нибудь знает, как я могу сохранить свой вывод FFMPEG напрямую на S3 без необходимости сначала сохранять его локально?
Изменить 1 Затем я попытался использовать параметр -method PUT
и использовать http вместо https для удаления TLS из уравнения. Вот вывод, который я получил при запуске ffmpeg с опцией -v trace
.
ffmpeg version N-93120-ga84af760b8 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20190212
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
libavutil 56. 26.100 / 56. 26.100
libavcodec 58. 47.100 / 58. 47.100
libavformat 58. 26.101 / 58. 26.101
libavdevice 58. 6.101 / 58. 6.101
libavfilter 7. 48.100 / 7. 48.100
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
Splitting the commandline.
Reading option '-i' ... matched as input url with argument 'C:input.wav'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option '-vn' ... matched as option 'vn' (disable video) with argument '1'.
Reading option '-ar' ... matched as option 'ar' (set audio sampling rate (in Hz)) with argument '44100'.
Reading option '-ac' ... matched as option 'ac' (set number of audio channels) with argument '2'.
Reading option '-ab' ... matched as option 'ab' (audio bitrate (please use -b:a)) with argument '192k'.
Reading option '-f' ... matched as option 'f' (force format) with argument 'mp3'.
Reading option '-method' ... matched as AVOption 'method' with argument 'PUT'.
Reading option '-v' ... matched as option 'v' (set logging level) with argument 'trace'.
Reading option 'https://my-bucket.s3.amazonaws.com/output.mp3?AWSAccessKeyId=AKIAJDSGJWM63VQEXHIQ&Expires=1550695990&Signature=dy3RVqDlX%2BlJ0INlDkl0Lm1Rqb4%3D' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option y (overwrite output files) with argument 1.
Applying option v (set logging level) with argument trace.
Successfully parsed a group of options.
Parsing a group of options: input url C:input.wav.
Successfully parsed a group of options.
Opening an input file: C:input.wav.
[NULL @ 000001fb37abb180] Opening 'C:input.wav' for reading
[file @ 000001fb37abc180] Setting default whitelist 'file,crypto'
Probing wav score:99 size:2048
[wav @ 000001fb37abb180] Format wav probed with size=2048 and score=99
[wav @ 000001fb37abb180] Before avformat_find_stream_info() pos: 54 bytes read:65590 seeks:1 nb_streams:1
[wav @ 000001fb37abb180] parser not found for codec pcm_s32le, packets or times may be invalid.
Last message repeated 1 times
[wav @ 000001fb37abb180] All info found
[wav @ 000001fb37abb180] stream 0: start_time: -192153584101141.156 duration: 256.716
[wav @ 000001fb37abb180] format: start_time: -9223372036854.775 duration: 256.716 bitrate=3072 kb/s
[wav @ 000001fb37abb180] After avformat_find_stream_info() pos: 204854 bytes read:294966 seeks:1 frames:50
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from 'C:input.wav':
Duration: 00:04:16.72, bitrate: 3072 kb/s
Stream #0:0, 50, 1/48000: Audio: pcm_s32le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s32, 3072 kb/s
Successfully opened the file.
Parsing a group of options: output url https://my-bucket.s3.amazonaws.com/output.mp3?AWSAccessKeyId=AKIAJDSGJWM63VQEXHIQ&Expires=1550695990&Signature=dy3RVqDlX%2BlJ0INlDkl0Lm1Rqb4%3D.
Applying option vn (disable video) with argument 1.
Applying option ar (set audio sampling rate (in Hz)) with argument 44100.
Applying option ac (set number of audio channels) with argument 2.
Applying option ab (audio bitrate (please use -b:a)) with argument 192k.
Applying option f (force format) with argument mp3.
Successfully parsed a group of options.
Opening an output file: https://my-bucket.s3.amazonaws.com/output.mp3?AWSAccessKeyId=AKIAJDSGJWM63VQEXHIQ&Expires=1550695990&Signature=dy3RVqDlX%2BlJ0INlDkl0Lm1Rqb4%3D.
[http @ 000001fb37b15140] Setting default whitelist 'http,https,tls,rtp,tcp,udp,crypto,httpproxy'
[tcp @ 000001fb37b16c80] Original list of addresses:
[tcp @ 000001fb37b16c80] Address 52.216.8.203 port 80
[tcp @ 000001fb37b16c80] Interleaved list of addresses:
[tcp @ 000001fb37b16c80] Address 52.216.8.203 port 80
[tcp @ 000001fb37b16c80] Starting connection attempt to 52.216.8.203 port 80
[tcp @ 000001fb37b16c80] Successfully connected to 52.216.8.203 port 80
[http @ 000001fb37b15140] request: PUT /output.mp3?AWSAccessKeyId=AKIAJDSGJWM63VQEXHIQ&Expires=1550695990&Signature=dy3RVqDlX%2BlJ0INlDkl0Lm1Rqb4%3D HTTP/1.1
Transfer-Encoding: chunked
User-Agent: Lavf/58.26.101
Accept: */*
Connection: close
Host: landr-distribution-reportsdev-mb.s3.amazonaws.com
Icy-MetaData: 1
Successfully opened the file.
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s32le (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
cur_dts is invalid (this is harmless if it occurs once at the start per stream)
detected 8 logical cores
[graph_0_in_0_0 @ 000001fb37b21080] Setting 'time_base' to value '1/48000'
[graph_0_in_0_0 @ 000001fb37b21080] Setting 'sample_rate' to value '48000'
[graph_0_in_0_0 @ 000001fb37b21080] Setting 'sample_fmt' to value 's32'
[graph_0_in_0_0 @ 000001fb37b21080] Setting 'channel_layout' to value '0x3'
[graph_0_in_0_0 @ 000001fb37b21080] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x3
[format_out_0_0 @ 000001fb37b22cc0] Setting 'sample_fmts' to value 's32p|fltp|s16p'
[format_out_0_0 @ 000001fb37b22cc0] Setting 'sample_rates' to value '44100'
[format_out_0_0 @ 000001fb37b22cc0] Setting 'channel_layouts' to value '0x3'
[format_out_0_0 @ 000001fb37b22cc0] auto-inserting filter 'auto_resampler_0' between the filter 'Parsed_anull_0' and the filter 'format_out_0_0'
[AVFilterGraph @ 000001fb37b0d940] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto_resampler_0 @ 000001fb37b251c0] picking s32p out of 3 ref:s32
[auto_resampler_0 @ 000001fb37b251c0] [SWR @ 000001fb37b252c0] Using fltp internally between filters
[auto_resampler_0 @ 000001fb37b251c0] ch:2 chl:stereo fmt:s32 r:48000Hz -> ch:2 chl:stereo fmt:s32p r:44100Hz
Output #0, mp3, to 'https://my-bucket.s3.amazonaws.com/output.mp3?AWSAccessKeyId=AKIAJDSGJWM63VQEXHIQ&Expires=1550695990&Signature=dy3RVqDlX%2BlJ0INlDkl0Lm1Rqb4%3D':
Metadata:
TSSE : Lavf58.26.101
Stream #0:0, 0, 1/44100: Audio: mp3 (libmp3lame), 44100 Hz, stereo, s32p, delay 1105, 192 kb/s
Metadata:
encoder : Lavc58.47.100 libmp3lame
cur_dts is invalid (this is harmless if it occurs once at the start per stream)
Last message repeated 6 times
size= 649kB time=00:00:27.66 bitrate= 192.2kbits/s speed=55.3x
size= 1207kB time=00:00:51.48 bitrate= 192.1kbits/s speed=51.5x
av_interleaved_write_frame(): Unknown error
No more output streams to write to, finishing.
[libmp3lame @ 000001fb37b147c0] Trying to remove 47 more samples than there are in the queue
Error writing trailer of https://my-bucket.s3.amazonaws.com/output.mp3?AWSAccessKeyId=AKIAJDSGJWM63VQEXHIQ&Expires=1550695990&Signature=dy3RVqDlX%2BlJ0INlDkl0Lm1Rqb4%3D: Error number -10054 occurred
size= 1251kB time=00:00:53.39 bitrate= 192.0kbits/s speed=51.5x
video:0kB audio:1252kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Input file #0 (C:input.wav):
Input stream #0:0 (audio): 5014 packets read (20537344 bytes); 5014 frames decoded (2567168 samples);
Total: 5014 packets (20537344 bytes) demuxed
Output file #0 (https://my-bucket.s3.amazonaws.com/output.mp3?AWSAccessKeyId=AKIAJDSGJWM63VQEXHIQ&Expires=1550695990&Signature=dy3RVqDlX%2BlJ0INlDkl0Lm1Rqb4%3D):
Output stream #0:0 (audio): 2047 frames encoded (2358144 samples); 2045 packets muxed (1282089 bytes);
Total: 2045 packets (1282089 bytes) muxed
5014 frames successfully decoded, 0 decoding errors
[AVIOContext @ 000001fb37b1f440] Statistics: 0 seeks, 2046 writeouts
[http @ 000001fb37b15140] URL read error: -10054
[AVIOContext @ 000001fb37ac4400] Statistics: 20611126 bytes read, 1 seeks
Conversion failed!
Таким образом, похоже, что он может подключиться к моему предварительно подписанному URL S3, но у меня все еще есть ошибка Error writing trailer
, связанная с URL read error
.
3 ответа
Лучший ответ
Поскольку цель состоит в том, чтобы взять поток байтов из S3 и вывести его также на S3, нет необходимости использовать возможности HTTP ffmpeg. ffmpeg создается как инструмент командной строки, который может принимать входные данные из stdin и выводить их в stdout / stderr. Использовать эти возможности проще, чем пытаться заставить ffmpeg обрабатывать чтение / запись HTTP. Вам просто нужно подключить поток HTTP (который читает из S3) к stdin ffmpegs и подключить его стандартный вывод к другому потоку (который пишет в S3). См. здесь для получения дополнительной информации о трубопроводе ffmpeg.
Самая простая реализация будет выглядеть так:
var s3Client = new AmazonS3Client(RegionEndpoint.USEast1);
var startInfo = new ProcessStartInfo
{
FileName = "ffmpeg",
Arguments = $"-i pipe:0 -y -vn -ar 44100 -ab 192k -f mp3 pipe:1",
CreateNoWindow = true,
RedirectStandardInput = false,
RedirectStandardOutput = false,
UseShellExecute = false,
RedirectStandardInput = true,
RedirectStandardOutput = true,
};
using (var process = new Process { StartInfo = startInfo })
{
// Get a stream to an object stored on S3.
var s3InputObject = await s3Client.GetObjectAsync(new GetObjectRequest
{
BucketName = "my-bucket",
Key = "input.wav",
});
process.Start();
// Store the output of ffmpeg directly on S3 in a background thread
// since I don't 'await'.
var uploadTask = s3Client.PutObjectAsync(new PutObjectRequest
{
BucketName = "my-bucket",
Key = "output.wav",
InputStream = process.StandardOutput.BaseStream,
});
// Feed the S3 input stream into ffmpeg
await s3Object.ResponseStream.CopyToAsync(process.StandardInput.BaseStream);
process.StandardInput.Close();
// Wait for ffmpeg to be done
await uploadTask;
process.WaitForExit();
}
Этот фрагмент дает представление о том, как передать ввод / вывод ffmpeg.
К сожалению, этот код не работает. При вызове PutObjectAsync
возникнет исключение, которое говорит Could not determine content length
. Да, это правда, S3 позволяет загружать только файлы известных размеров, мы не можем использовать PutObjectAsync
, так как мы не знаем, насколько большим будет вывод ffmpeg.
Идея обойти это заключается в использовании многоэтапной загрузки S3. Таким образом, вместо прямой подачи ffmpeg непосредственно в S3, вы записываете его в буфер памяти (скажем, 25 МБ), который не слишком велик (чтобы он не занимал всю память лямбда-версии AWS, которая будет выполнять этот код) , Когда буфер заполнен, вы загружаете буфер на S3 с помощью многоэтапной загрузки. Затем, как только ffmpeg завершит перекодировку входного файла, вы берете то, что осталось в текущем буфере памяти, загружаете этот последний буфер в S3 и затем просто вызываете CompleteMultipartUpload. Это займет все 25 МБ частей и объединит их в один файл.
Вот и все. С помощью этой стратегии можно считывать файл с S3, транскодировать его и сохранять на лету в S3, не сохраняя ничего локально. Таким образом, можно перекодировать большие файлы в лямбду AWS, которая использует минимальное количество памяти и практически не имеет места на диске.
Это было успешно реализовано. Я постараюсь увидеть, можно ли поделиться этим кодом.
Предупреждение : как уже упоминалось в комментарии, результат, который мы получаем, не на 100% идентичен, если мы передаем выходные данные ffmpeg или если мы позволим ffmpeg записывать себя в локальный файл. При записи в локальный файл ffmpeg может выполнять поиск в начале файла после завершения перекодирования. Затем он может обновить метаданные файла с некоторыми результатами транскодирования. Я не знаю, каково влияние отсутствия обновленных метаданных.
2
mabead
23 Фев 2019 в 00:43
CLI AWS на самом деле имеет функцию для выполнения именно того, что описано @mabead выше. Поскольку CLI по умолчанию не установлен в lambda, вам нужно будет включить его, вероятно, в виде слоя, но если у вас уже установлен ffmpeg, вы, очевидно, знаете, как это сделать.
По сути, это выглядит так (без параметров ffmpeg):
aws s3 cp s3://source-bucket/source.mp4 - | ffmpeg -i - -f matroska - | aws s3 cp - s3://dest-bucket/output.mkv
Вы можете включить тире (‘-‘) в качестве источника или имени файла в командах CLI и ffmpeg. Таким образом, в этом случае мы говорим, что читаем из S3 в STDOUT, передаем в ffmpeg STDIN, записываем вывод ffmpeg в STDOUT, передаем в S3.
Обычно я работаю только с видеофайлами, поэтому у меня нет большого опыта работы с чистым звуком, поэтому вам придется попробовать его. Одна вещь, которую я заметил, заключается в том, что определенные форматы контейнеров не работают для выходной стороны этого. Например, если я пытаюсь записать файл mp4 в S3, я вижу следующую ошибку:
muxer does not support non seekable output Could not write header for
output file #0 (incorrect codec parameters ?): Invalid argument Error
initializing output stream 0:0 --
Я думаю, что это, вероятно, та же проблема, что и комментарий о невозможности обновить заголовок с результатами окончательного кодирования. Вы должны увидеть, что происходит с mp3.
2
JasonK
27 Май 2019 в 17:23
Я использую ffmpeg
протокол доступа к каналу, как @mabead, упомянутый в его ответе, и все работает отлично. Я на самом деле нацеливаю файл через URL, и он, кажется, работает .mp4
вызовет некоторые проблемы, потому что вам нужно иметь возможность вернуться к началу вывода для записи заголовков после завершения кодирования. Добавление -movflags frag_keyframe+empty_moov
исправило это для моего варианта использования. Надеюсь, этот код поможет:
ffmpeg -i https://notreal-bucket.s3-us-west-1.amazonaws.com/video/video.mp4 -f mp4 -movflags frag_keyframe+empty_moov pipe:1 | aws s3 cp - s3://notreal-bucket/video/output.mp4
ffmpeg docs — труба
2
Mike
7 Июн 2019 в 21:48