Транскодирование ffmpeg останавливается через несколько секунд

1236
Salem F

Я пытаюсь сделать это в течение недели безуспешно. То, что я пытаюсь сделать, - это перекодировать видео из потокового источника в реальном времени и уменьшить его с помощью FFmpeg, но каждый раз, когда я начинаю транскодировать его вещание в течение ~ 11 секунд и останавливаюсь.

Последняя команда, которую я попробовал:

ffmpeg -re -i 'http://source.com/1034.ts' -preset ultrafast http://localhost:2052/feed1.ffm 

Я попытался загрузить файл .ts с помощью IDM, и он завершил загрузку файла примерно через 12 секунд, когда FFmpeg прекратил транскодирование на нем.

Означает ли это, что FFmpeg загружает этот файл как один сегмент и не продолжает чтение исходного видео, как это обычно делают проигрыватели видео. Кстати, я попытался с источником с VLC-плеером, и он не остановил воспроизведение того же исходного видео.

Я решил передать команду FFmpeg через конфигурационный файл FFserver ffserver.conf

Launch ffmpeg -i 'http://source.com/1.ts' -copyinkf -codec copy 

Некоторое время поток работает нормально, но после тестирования нескольких источников, я замечаю, что это трудно для транскодирования HD-видео.

Я предполагаю, что проблема с моим VPS KVM-сервером очень ограничена, ЦП и ОЗУ (только 128 МБ)! Так как я попытался использовать ultrafastзапрограммированную но din't решить эту проблему, еще одна вещь, я заметил, когда я дают возможность AVOptionVideo crfустановки на ffserver.confтранс-кодирование пробегов бит плавно, без сбрасывания частоты кадров. Поскольку мой сервер использует Xeon L5520процессор, который является устаревшим процессором, особенно я использую 1/4 мощности одноядерного V (если они считают HT, то это будет 1/8 реального ядра) :(

== Обновление ==

Похоже, проблема была с источником видео, который я использую, их сервер находился под большой нагрузкой, и сервер потерял соединение через несколько секунд, ничего плохого в моей команде или FFmpeg тоже нет.

# vlc -I dummy 'https://source.com/1034.ts' --sout '#standard' VLC media player 2.2.8 Weatherwax (revision 2.2.7-14-g3cc1d8cba9) [09d3fdf0] pulse audio output error: PulseAudio server connection failure: Connection refused [09d279c0] core interface error: no suitable interface module [09c9b8f8] core libvlc error: interface "globalhotkeys,none" initialization failed [09d279c0] dbus interface error: Failed to connect to the D-Bus session daemon: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11 [09d279c0] core interface error: no suitable interface module [09c9b8f8] core libvlc error: interface "dbus,none" initialization failed [09d279c0] dummy interface: using the dummy interface module... [b5e04ae0] access_output_http access out: Consider passing --http-host=IP on the command line instead. [b5e38ab8] ts demux: MPEG-4 descriptor not found for pid 0x101 type 0xf [b5e90ae0] packetizer_mpeg4audio decoder: AAC channels: 2 samplerate: 48000 [flv @ 0xb5e33b40] dimensions not set [b5e06360] avformat mux error: could not write header: Invalid argument [b5e88ef0] core decoder error: cannot continue streaming due to errors [b5e90ae0] core decoder error: cannot continue streaming due to errors 

Здесь вывод с -loglevel verbose

:~# ffmpeg -i http://source.com/1.ts -copyinkf -codec copy -loglevel verbose http://127.0.0.1:8090/feed1.ffm ffmpeg version 2.6.9 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 4.9.2 (Debian 4.9.2-10) configuration: --prefix=/usr --extra-cflags='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security ' --extra-ldflags='-Wl,-z,relro' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-libvpx --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-librtmp --enable-avfilter --enable-libfreetype --enable-libvo-aacenc --disable-decoder=amrnb --enable-libvo-amrwbenc --enable-libaacplus --libdir=/usr/lib/i386-linux-gnu --disable-vda --enable-libbluray --enable-libcdio --enable-gnutls --enable-frei0r --enable-openssl --enable-libass --enable-libopus --enable-fontconfig --enable-libpulse --disable-mips32r2 --disable-mipsdspr1 --disable-mipsdspr2 --enable-libvidstab --enable-libzvbi --enable-avresample --disable-htmlpages --disable-podpages --enable-libutvideo --enable-libfdk-aac --enable-libx265 --enable-libiec61883 --enable-vaapi --enable-libdc1394 --disable-altivec --shlibdir=/usr/lib/i386-linux-gnu libavutil 54. 20.100 / 54. 20.100 libavcodec 56. 26.100 / 56. 26.100 libavformat 56. 25.101 / 56. 25.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 11.102 / 5. 11.102 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100 Invalid UE golomb code Last message repeated 2 times Input #0, mpegts, from 'http://source.com/1.ts': Duration: N/A, start: 30472.768167, bitrate: N/A Program 1 Metadata: service_name : Service01 service_provider: FFmpeg Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 960x540 (960x544) [SAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 100 tbc Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 105 kb/s [graph 0 input from stream 0:1 @ 0x971f2c0] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:0x3 [audio format for output stream 0:0 @ 0x9844de0] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_anull_0' and the filter 'audio format for output stream 0:0' [auto-inserted resampler 0 @ 0x97115e0] ch:2 chl:stereo fmt:fltp r:48000Hz -> ch:1 chl:mono fmt:fltp r:22050Hz [graph 1 input from stream 0:0 @ 0x96f5d00] w:960 h:540 pixfmt:yuv420p tb:1/90000 fr:50/1 sar:1/1 sws_param:flags=2 [scaler for output stream 0:1 @ 0x96f5e80] w:352 h:240 flags:'0x4' interl:0 [scaler for output stream 0:1 @ 0x96f5e80] w:960 h:540 fmt:yuv420p sar:1/1 -> w:352 h:240 fmt:yuv420p sar:40/33 flags:0x4 Output #0, ffm, to 'http://127.0.0.1:8090/feed1.ffm': Metadata: creation_time : now encoder : Lavf56.25.101 Stream #0:0: Audio: wmav2, 22050 Hz, mono, fltp, 64 kb/s Metadata: encoder : Lavc56.26.100 wmav2 Stream #0:1: Video: msmpeg4v3 (msmpeg4), yuv420p, 352x240 [SAR 40:33 DAR 16:9], q=2-31, 256 kb/s, 50 fps, 1000k tbn, 15 tbc Metadata: encoder : Lavc56.26.100 msmpeg4 Stream mapping: Stream #0:1 -> #0:0 (aac (native) -> wmav2 (native)) Stream #0:0 -> #0:1 (h264 (native) -> msmpeg4v3 (msmpeg4)) Press [q] to stop, [?] for help Invalid UE golomb code *** dropping frame 3 from stream 1 at ts 1 Last message repeated 1 times [msmpeg4 @ 0x970f060] warning, clipping 1 dct coefficients to -127..127 *** dropping frame 41 from stream 1 at ts 39me=00:00:02.73 bitrate= 311.7kbits/s dup=0 drop=88 Last message repeated 1 times [h264 @ 0x9844a00] error while decoding MB 58 12, bytestream -5 [h264 @ 0x9844a00] concealing 1311 DC, 1311 AC, 1311 MV errors in B frame *** dropping frame 53 from stream 1 at ts 52 No more output streams to write to, finishing. frame= 55 fps= 42 q=4.3 Lsize= 152kB time=00:00:03.66 bitrate= 339.6kbits/s dup=0 drop=119 video:116kB audio:26kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 6.760316% Input file #0 (http://source.com/1.ts): Input stream #0:0 (video): 174 packets read (220322 bytes); 174 frames decoded; Input stream #0:1 (audio): 156 packets read (36657 bytes); 156 frames decoded (159744 samples); Total: 330 packets (256979 bytes) demuxed Output file #0 (http://127.0.0.1:8090/feed1.ffm): Output stream #0:0 (audio): 72 frames encoded (73383 samples); 72 packets muxed (26712 bytes); Output stream #0:1 (video): 55 frames encoded; 55 packets muxed (119080 bytes); Total: 127 packets (145792 bytes) muxed 

Здесь введите информацию о файле URL. После того, как я загрузил его на свой компьютер с IDM

General ID : 1 (0x1) Complete name : D:\1.ts Format : MPEG-TS File size : 256 KiB Duration : 2 s 520 ms Overall bit rate mode : Variable Overall bit rate : 788 kb/s  Video ID : 256 (0x100) Menu ID : 1 (0x1) Format : AVC Format/Info : Advanced Video Codec Format profile : High@L3.1 Format settings, CABAC : Yes Format settings, RefFrames : 2 frames Codec ID : 27 Duration : 2 s 680 ms Width : 960 pixels Height : 540 pixels Display aspect ratio : 16:9 Frame rate : 50.000 FPS Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive  Audio ID : 257 (0x101) Menu ID : 1 (0x1) Format : AAC Format/Info : Advanced Audio Codec Format version : Version 4 Format profile : LC Muxing mode : ADTS Codec ID : 15 Duration : 2 s 69 ms Bit rate mode : Variable Channel(s) : 2 channels Channel positions : Front: L R Sampling rate : 48.0 kHz Frame rate : 46.875 FPS (1024 SPF) Compression mode : Lossy Delay relative to video : -12 ms  Menu ID : 4096 (0x1000) Menu ID : 1 (0x1) Duration : 2 s 520 ms List : 256 (0x100) (AVC) / 257 (0x101) (AAC) Service name : Service01 Service provider : FFmpeg Service type : digital television 
1
Что происходит, когда вы добавляете '-t 60'? Samuel Tulach 6 лет назад 1
я думаю, проблема та же, что и в файле деления исходного потока на сегменты. В любом случае я использую команду ffmpeg непосредственно на `ffserver.conf` с` Launch ffmpeg -i 'source.com/4798.ts' -copyinkf -codec copy - preset ultrafast` это решает проблему остановки FFmpeg. Я предполагаю, что FFserver перезапускает сервер FFmpeg, когда заканчивается загрузка первого сегмента. Salem F 6 лет назад 0
Вы пробовали регистрировать вывод и искать ошибки? Используйте флаг `-report` в конце вашей команды, который должен записать файл журнала в текущий каталог. 6 лет назад 0
Ваша пропускная способность (битрейт) достаточно велика? «crf» - это коэффициент постоянной скорости, который «упростит» транскодирование, потому что больше не нужно управлять скоростью. Но размер потока битов будет сильно различаться. Если вы получаете пропущенные кадры без crf, это говорит о том, что кодировщик решил отбросить их, чтобы удовлетворить требования битрейта. 6 лет назад 0
Почему бы и нет, но я удивлен, что vlc не может справиться с мульти-чанкингом. Там должна быть какая-то защита (drm?) Cryptopat 6 лет назад 0
@Cryptopat VLC работает на моем ПК, но у меня медленное соединение, не могу обработать скорость потока 1Mbit-VS-4Mbit, я тестирую сервер ввода-вывода и он> 100Mbit Salem F 6 лет назад 0
^^ Кстати, я решаю это, используя другой источник видео, так как исходный источник находился под большой нагрузкой. Salem F 5 лет назад 0

0 ответов на вопрос