Добрый день уважаемые форумчане.
Имеется машина с убунтой 16.04 на борту. Хочу организовать небольшое видеонаблюдение (1 аналоговая камера и 1 ip-камера).
Установил ffmpeg с ffserver.
Настроил ffserver.
конфиг на всякий случай:
HTTPPort 8090
HTTPBindAddress 0.0.0.0.
MaxHTTPConnections 10
MaxClients 10
MaxBandwidth 10000
CustomLog /var/log/ffserver-access.log
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 3M
ACL allow localhost
ACL allow 127.0.0.1
ACL allow 192.168.163.39
</Feed>
<Stream cam.mjpg>
Feed feed1.ffm
Format mpjpeg
VideoFrameRate 10
VideoIntraOnly
VideoSize 1024x768
VideoQMin 1
VideoQMax 10
Preroll 10
NoAudio
Strict -1
</Stream>
<Stream index.html>
Format status
</Stream>
<Stream cam1024.asf>
Feed feed1.ffm
Format asf
VideoFrameRate 10
VideoSize 1024x768
VideoBitRate 128
VideoBufferSize 40
VideoGopSize 30
VideoQMin 1
VideoQMax 10
NoAudio
Preroll 10
StartSendOnKey
</Stream>
<Stream cam352.asf>
Feed feed1.ffm
Format asf
VideoFrameRate 15
VideoSize 352x240
VideoBitRate 256
VideoQMin 1
VideoQMax 10
VideoBufferSize 40
VideoGopSize 30
NoAudio
StartSendOnKey
Preroll 10
</Stream>
<Stream stat.html>
Format status
ACL allow localhost
</Stream>
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>
если прописать запуск ffmpeg в конфиге ffserver, то все работает. Но если попытаться запустить сначала ffserver и потом ffmpeg, то возвращает ошибку 5хх. Не могу понять что я делаю не так
ffmpeg -s 1024x768 -r 10 -f video4linux2 -i /dev/video0 http://localhost:8090/feed1.ffm
ffmpeg version 2.8.17-0ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
configuration: --prefix=/usr --extra-version=0ubuntu0.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/i386-linux-gnu --incdir=/usr/include/i386-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --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-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv --disable-i686
WARNING: library configuration mismatch
avcodec configuration: --prefix=/usr --extra-version=0ubuntu0.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/i386-linux-gnu --incdir=/usr/include/i386-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --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-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv --disable-i686 --enable-version3 --disable-doc --disable-programs --disable-avdevice --disable-avfilter --disable-avformat --disable-avresample --disable-postproc --disable-swscale --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libvo_aacenc --enable-libvo_amrwbenc
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
[video4linux2,v4l2 @ 0x99cc500] The V4L2 driver changed the video from 1024x768 to 912x576
[video4linux2,v4l2 @ 0x99cc500] The driver does not permit changing the time per frame
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 5612.922852, bitrate: 157593 kb/s
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 912x576, 157593 kb/s, 25 fps, 25 tbr, 1000k tbn, 1000k tbc
[http @ 0x99cd8c0] HTTP error 503 Service Unavailable
http://localhost:8090/feed1.ffm: Server returned 5XX Server Error reply
upd:
если вместо localhost вбить 127.0.0.1 то выходит ошибка 403 почему то.
[http @ 0x83278c0] HTTP error 403 Forbidden
http://127.0.0.1:8090/feed1.ffm: Server returned 403 Forbidden (access denied)
Погуглил, нашел заметку человека, только не до конца понял что он пишет:
The "localhost" problem apparently is a far more fundamental ffmpeg problem. It also fails in rather unrelated contexts, e.g. ffmpeg -loop 1 - i http://localhost/testImage.png. – MSalters Jul 13 '17 at 9:24
Excellent, that solved my problem! localhost is going to be either 127.0.0.1 or ::1 and many servers (and clients too) do not support that duality. The best for servers is to listen to the IPv6 (::1) and that will accept connections to 127.0.0.1 automatically. In that case, for clients, either will work if the server followed that rule. – Alexis Wilke Jun 30 '20 at 2:30
upd2:
Походу проблема была в том, что я пытался запускать эти команды через клиент ссш путти. Хотя в чем разница - не пойму.
Запустил "локально" через сервер внс и оно без проблем начало передавать поток ожидающему ffserverУ.
Вот только не пойму, почему подключится со своего компа по нужному адресу не могу.
Опцией allow ведь вписал свой айпи-адрес в списки разрешенных...
#upd3:
Ну да. IPTABLES же.
Только ведь сначала работало и без внесения правил в айпитейблс. Мистика какая то...