LINUX.ORG.RU

Непрерывный avserver


0

1

Добрый день. Давно бьюсь с ffserver(avserver) но не получается достигнуть непрерывного вещания. Если просто запускать с рекомендуемыми конфигами, то видео останавливается при достижении максимума filemaxsize. Страницу обновляем видео идет с начала. Поэтому каждые 15 минут удаляем промежуточный файл чтобы видео не крутилось весь день одно и то же. Но это тоже не решение. Возможно ли сделать непрерывное вещание почти в реальном времени? Заранее спасибо.

Кстати как-то слышал что возможно сделать видео файл перезаписываемым. Т.е. идет запись новых данных в файл постоянно, без увеличения его размера. Что-то особо в это не верю, но может кто подскажет такое решение?

В документации в avserver

WARNING: avserver is unmaintained, largely broken and in need of a complete rewrite. It probably won’t work for you. Use at your own risk.

Может быть стримить через vlc?

anonymous ()
Ответ на: комментарий от anonymous

VLC использовали для разных целей, как и для стриминга. Но что-то он потреблением ресурсов не нравится. :(

el_vago ()
Ответ на: комментарий от fopen

# Порт, на котором будет работать ffserver Port 8090 # Адрес, на котором будет работать ffserver. # Если указать 0.0.0.0 то будут использованы все доступные адреса BindAddress 0.0.0.0 # Максимальное количество обслуживаемых соединений MaxHTTPConnections 2000 # Максимальное количество клиентов MaxClients 1000 # Максимальная используемая полоса (в килобитах) MaxBandwidth 1000 # Файл журнала. Формат подобен формату лога apache CustomLog /var/log/ffserver-access.log # Описываем источник <Feed cam.ffm> # Временный файл для хранения промежуточных данных File /tmp/cam.ffm # Максимальный размер файла с промежуточными данными FileMaxSize 80M # Команда для запуска источника. # Адрес для отправки данных источником автоматически будет добавлен в конец этой строки # С каких адресов может обращаться источник ACL allow 127.0.0.1 </Feed> # Описываем первый поток. Это будет поток в формате flv <Stream cam.flv> # Источник потока Feed cam.ffm # Используемый формат Format flv # Используемый кодек VideoCodec flv # Частота кадров VideoFrameRate 25 # Размер буфера VideoBufferSize 80000 # Битрейт VideoBitRate 200 # Минимальное и максимальное качество VideoQMin 15 VideoQMax 30 # Размер видео. Дожно совпадать с размером видео на источнике VideoSize 640x400 # Время ожидания перед началом отправки данных клиенту (в секундах) PreRoll 5 # Звук мы транслировать не будем NoAudio </Stream> # Второй поток. Это SWF-файл с FLV-потоком внутри # Всё остальное по аналогии <Stream cam.swf> Feed cam.ffm Format swf VideoCodec flv VideoFrameRate 25 VideoBufferSize 800000 VideoBitRate 200 VideoQMin 15 VideoQMax 30 VideoSize 640x400 PreRoll 0 NoAudio </Stream> # При обращении к индексной страницы ffserver будем отображать текущий статус сервера <Stream index.html> Format status </Stream>

Запускаем скриптом в кроне каждые сколько-то там минут для очистки cam.ffm, чтобы видео не зацикливалось : #!/bin/bash

killall avserver rm /tmp/cam.ffm avserver -f /etc/ffserver.conf avconv -r 25 -vcodec mjpeg -i http://guest:guest@10.254.251.250/video4.mjpg -vcodec flv http://localhost:8090/cam.ffm

В примерах видел вставку avconv в конфиг, но что-то тогда камера не вещает, может просто неправильно пишу саму команду. Буду рад вашей помощи.

el_vago ()
Ответ на: комментарий от fopen

Раньше использовали ffserver c такими же конфигами, проблема была та же. Правда ffmpeg в виде:

ffmpeg -r 25 -f mjpeg -i http://guest:guest@10.254.251.250/video4.mjpg http://localhost:8090/cam.ffm

выдавала:

http @ 0x1f46760] HTTP error 403 Forbidden

http://localhost:8090/cam.ffm: Input/output error

c avconv такого не случалось, да и при запуске ffmpeg настоятельно рекомендует переходить на avconv

This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.

el_vago ()
Ответ на: комментарий от el_vago

Раньше использовали ffserver c такими же конфигами, проблема была та же. Правда ffmpeg в виде:

ffmpeg -r 25 -f mjpeg -i http://guest:guest@10.254.251.250/video4.mjpg http://localhost:8090/cam.ffm

выдавала:

http @ 0x1f46760] HTTP error 403 Forbidden

http://localhost:8090/cam.ffm: Input/output error

Значит <feed cam.ffm> в ffserver не взлетел. Смотри вывод ffserver или здесь покажи.

fopen ★★ ()
Ответ на: комментарий от fopen

# Порт, на котором будет работать ffserver

Port 8090

# Адрес, на котором будет работать ffserver.

# Если указать 0.0.0.0 то будут использованы все доступные адреса

BindAddress 0.0.0.0

# Максимальное количество обслуживаемых соединений

MaxHTTPConnections 2000

# Максимальное количество клиентов

MaxClients 1000

# Максимальная используемая полоса (в килобитах)

MaxBandwidth 20000

# Файл журнала. Формат подобен формату лога apache

CustomLog /var/log/ffserver-access.log

# Описываем источник

<Feed cam.ffm>

# Временный файл для хранения промежуточных данных

File /tmp/cam.ffm

# Максимальный размер файла с промежуточными данными

FileMaxSize 100M

# Команда для запуска источника.

# Адрес для отправки данных источником автоматически будет

добавлен в конец этой строки

# С каких адресов может обращаться источник

ACL allow 127.0.0.1

</Feed>

# Описываем первый поток. Это будет поток в формате flv

<Stream cam.flv>

# Источник потока

Feed cam.ffm

# Используемый формат

Format flv

# Используемый кодек

VideoCodec flv

# Частота кадров

VideoFrameRate 25

# Размер буфера

VideoBufferSize 80000

# Битрейт

VideoBitRate 200

# Минимальное и максимальное качество

VideoQMin 15

VideoQMax 30

# Размер видео. Дожно совпадать с размером видео на источнике

VideoSize 640x400

# Время ожидания перед началом отправки данных клиенту (в секундах)

PreRoll 0

# Звук мы транслировать не будем

NoAudio

</Stream>

# Второй поток. Это SWF-файл с FLV-потоком внутри

# Всё остальное по аналогии

<Stream cam.swf>

Feed cam.ffm

Format swf

VideoCodec flv

VideoFrameRate 25

VideoBufferSize 80000

VideoBitRate 200

VideoQMin 15

VideoQMax 30

VideoSize 640x400

PreRoll 0

NoAudio

</Stream>

# При обращении к индексной страницы ffserver будем отображать

текущий статус сервера

<Stream index.html>

Format status

</Stream>

Сейчас при запуске ffmpeg:

ffmpeg -r 25 -f mjpeg -i http://guest:guest@10.254.251.250/video4.mjpg http://localhost:8090/cam.ffm

segmentation fault

Лог ffserver

Tue Jul 22 12:12:00 2014 AVserver started.
Tue Jul 22 12:12:13 2014 127.0.0.1 - - [GET] «/cam.ffm HTTP/1.1» 200 4149
Tue Jul 22 12:12:14 2014 127.0.0.1 - - [POST] «/cam.ffm HTTP/1.1» 200 0

el_vago ()
Ответ на: комментарий от el_vago
Tue Jul 22 12:12:00 2014 AVserver started.

Это лог AVserver. Сегодня это уже далеко не ffserver. Не надо путать FFmpeg и Libav, и ожидать от них равного результата.

Отвечаю на вопросы о FFmpeg.

fopen ★★ ()
Последнее исправление: fopen (всего исправлений: 1)
Ответ на: комментарий от fopen

Запускаю ffserver. Видать версия новая автоматом запускает avserver

#ffserver
avserver version 0.8.9-6:0.8.9-0ubuntu0.13.04.1, Copyright (c) 2000-2013 the >Libav developers
built on Nov 9 2013 19:09:48 with gcc 4.7.3

el_vago ()
Ответ на: комментарий от fopen

Поставил на Arch, с тем же конфигом. даже уменьшил filemaxsize, все отлично идет. Сервер на Ubuntu достался от ушедшего человека, поэтому всех подробностей установки ffmpeg не знаю. Спасибо за помощь надеюсь запуск ffserver на более привычном Arch или CentOS поможет.

el_vago ()
Ответ на: комментарий от fopen

Теперь видео идет почти в реальном времени. Но проблема с остановкой осталась по достижении VideoBufferSize каждого смотрящего. Возможно и с этим поможете? :)

Поставил ffmpeg на CentOS.

el_vago ()
Ответ на: комментарий от el_vago

-r 25 убрать, это не имеет смысла для http://*.mjpg, а может даже вредит.

Выкинуть VideoBufferSize (а зачем он? не знаешь - значит не нужен), добавить global_header - его контейнер требует.

Далее просто рекомендации. Поднять bitrate, иначе ничего не увидишь, 200 - это очень мало для такого размера, кстати это значение по умолчанию в ffmpeg, из-за чего все плюются, увидев первый результат. И для начала отпусти мин-макс параметры, чтобы получить приятный стабильный результат. А потом уже закрутишь гайки, как тебе надо.

<Stream *>
    ...
    VideoBitRate 5000
    AVOptionVideo flags +global_header 
    AVOptionVideo qmin 1
    AVOptionVideo qmax 30
    AVOptionVideo minrate 1M
    AVOptionVideo maxrate 5M
</Stream>

fopen ★★ ()
Ответ на: комментарий от fopen

Спасибо. Как я понял avserver вообще плюет на многие параметры, т.к. картинка шла неплохая независимо от qmin, qmax и т.д. Только запустил с этим конфигом ffserver сразу качество ухудшилось. Сейчас попробую с этим конфигом

el_vago ()
Ответ на: комментарий от fopen

Сейчас заметил что зря грешил на VideoBufferSize, вещание прерывается после достижения 100мб Bytes transferred на каждого подключенца, в консоле в это время возникает

Wed Jul 23 11:31:31 2014 10.251.251.14 - - New connection: GET /
Wed Jul 23 11:31:31 2014 10.251.251.14 - - [GET] «/ HTTP/1.1» 200 1760

Конфиг привел в вид:

<Stream cam.swf>
Feed cam.ffm
Format swf
VideoCodec flv
VideoFrameRate 25
VideoBitRate 5000
AVOptionVideo flags +global_header
AVOptionVideo qmin 5
AVOptionVideo qmax 10
AVOptionVideo minrate 1M
AVOptionVideo maxrate 5M
VideoSize 640x400
PreRoll 0
NoAudio
</Stream>

el_vago ()
Ответ на: комментарий от el_vago

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

fopen ★★ ()
Ответ на: комментарий от fopen

Конфиг ffserver.conf

Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 20000
CustomLog /var/log/ffserver-access.log
<Feed cam.ffm>
File /tmp/cam.ffm
FileMaxSize 3M
Launch ffmpeg -s 640x400 -i http://guest:guest@10.254.251.250/video4.mjpg
ACL allow 127.0.0.1
</Feed>
<Stream cam.swf>
Feed cam.ffm
Format swf
VideoCodec flv
VideoFrameRate 25
VideoBitRate 5000
AVOptionVideo flags +global_header
AVOptionVideo qmin 5
AVOptionVideo qmax 10
AVOptionVideo minrate 1M
AVOptionVideo maxrate 5M
VideoSize 640x400
PreRoll 0
NoAudio
</Stream>
<Stream index.html>
Format status
</Stream>

Далее скриптом запускаем:

#!/bin/bash

killall ffserver
rm /tmp/cam.ffm
ffserver -f /etc/ffserver.conf

Вывод в консоль:

ffserver version 2.2.4 Copyright (c) 2000-2014 the FFmpeg developers
built on Jul 1 2014 17:21:53 with gcc 4.9.0 (GCC) 20140604 (prerelease)
configuration: --prefix=/usr --disable-debug --disable-static --enable->avisynth --enable-avresample --enable-decoder=atrac3 --enable->decoder=atrac3p --enable-dxva2 --enable-fontconfig --enable-gnutls --enable->gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm -->enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb -->enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable->libpulse --enable-librtmp --enable-libschroedinger --enable-libspeex --enable->libtheora --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 >--enable-libx265 --enable-libxvid --enable-pic --enable-postproc --enable->runtime-cpudetect --enable-shared --enable-swresample --enable-vdpau -->enable-version3 --enable-x11grab
libavutil 52. 66.100 / 52. 66.100
libavcodec 55. 52.102 / 55. 52.102
libavformat 55. 33.100 / 55. 33.100
libavdevice 55. 10.100 / 55. 10.100
libavfilter 4. 2.100 / 4. 2.100
libavresample 1. 2. 0 / 1. 2. 0
libswscale 2. 5.102 / 2. 5.102
libswresample 0. 18.100 / 0. 18.100
libpostproc 52. 3.100 / 52. 3.100
Thu Jul 24 10:34:54 2014 FFserver started.
Thu Jul 24 10:34:54 2014 Launch command line: ffmpeg -i http://>guest:guest@10.254.251.250/video4.mjpg http://127.0.0.1:8090/cam.ffm
ffmpeg version 2.2.4 Copyright (c) 2000-2014 the FFmpeg developers
built on Jul 1 2014 17:21:53 with gcc 4.9.0 (GCC) 20140604 (prerelease)
configuration: --prefix=/usr --disable-debug --disable-static --enable->avisynth --enable-avresample --enable-decoder=atrac3 --enable->decoder=atrac3p --enable-dxva2 --enable-fontconfig --enable-gnutls --enable->gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm -->enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb -->enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable->libpulse --enable-librtmp --enable-libschroedinger --enable-libspeex --enable->libtheora --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 >--enable-libx265 --enable-libxvid --enable-pic --enable-postproc --enable->runtime-cpudetect --enable-shared --enable-swresample --enable-vdpau -->enable-version3 --enable-x11grab
libavutil 52. 66.100 / 52. 66.100
libavcodec 55. 52.102 / 55. 52.102
libavformat 55. 33.100 / 55. 33.100
libavdevice 55. 10.100 / 55. 10.100
libavfilter 4. 2.100 / 4. 2.100
libavresample 1. 2. 0 / 1. 2. 0
libswscale 2. 5.102 / 2. 5.102
libswresample 0. 18.100 / 0. 18.100
libpostproc 52. 3.100 / 52. 3.100
Input #0, mjpeg, from 'http://guest:guest@10.254.251.250/video4.mjpg':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p(pc), 1280x800 [SAR 96:96 DAR >8:5], 25 fps, 25 tbr, 1200k tbn, 25 tbc
Thu Jul 24 10:34:58 2014 127.0.0.1 - - New connection: GET /cam.ffm
Thu Jul 24 10:34:58 2014 127.0.0.1 - - [GET] «/cam.ffm HTTP/1.1» 200 4175
Thu Jul 24 10:34:58 2014 127.0.0.1 - - New connection: POST /cam.ffm
[swscaler @ 0x825c860] deprecated pixel format used, make sure you did >set range correctly
[flv @ 0x8275a20] Warning min_rate > 0 but min_rate != max_rate isn't >recommended!
[flv @ 0x8275a20] impossible bitrate constraints, this will fail
Output #0, ffm, to 'http://127.0.0.1:8090/cam.ffm':
Metadata:
creation_time : now
encoder : Lavf55.33.100
Stream #0:0: Video: flv1 (flv), yuv420p, 640x400 [SAR 1:1 DAR 8:5], >q=1-5, 5000 kb/s, 1000k tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg -> flv)
Press [q] to stop, [?] for help
Thu Jul 24 10:35:16 2014 10.251.251.14 - - New connection: GET />te=5092.5kbits/s
Thu Jul 24 10:35:16 2014 10.251.251.14 - - [GET] «/ HTTP/1.1» 200 1620

При достижении 100мб как я говорил в консоле снова идет

Thu Jul 24 10:38:10 2014 10.251.251.14 - - New connection: GET />te=5092.5kbits/s
Thu Jul 24 10:38:10 2014 10.251.251.14 - - [GET] «/ HTTP/1.1» 200 1620

el_vago ()
Ответ на: комментарий от el_vago

Здесь все отлично. Все работает. Но вывод ffserver и ffmpeg валится в одну кучу и перетирает местами:

Thu Jul 24 10:38:10 2014 10.251.251.14 - - New connection: GET />te=5092.5kbits/s
В начале выхлоп от ffserver, а конец строки от ffmpeg. По хорошему разнести в разные файлы надо бы, вдруг чего там перетерлось интересного. Но это вряд ли.

Я бы на плеер посмотрел, чую, он мутит воду.

1. Покажи статус-страничку http://10.251.251.14:8090/ до возникновения проблемы (до остановки видео, в первые 100МБ), после возникновения и еще через несколько секунд позже.

2. Используй ffplay для воспроизведения и покажи его вывод.

fopen ★★ ()
Ответ на: комментарий от fopen

ffplay как и VLC идет без разрывов, проблемы в браузере возникают :( Вот выход ffplay:

ffplay version 2.2.4 Copyright (c) 2003-2014 the FFmpeg developers
built on Jul 1 2014 17:21:53 with gcc 4.9.0 (GCC) 20140604 (prerelease)
configuration: --prefix=/usr --disable-debug --disable-static --enable->avisynth --enable-avresample --enable-decoder=atrac3 --enable->decoder=atrac3p --enable-dxva2 --enable-fontconfig --enable-gnutls --enable->gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm -->enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb -->enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable->libpulse --enable-librtmp --enable-libschroedinger --enable-libspeex --enable->libtheora --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 >--enable-libx265 --enable-libxvid --enable-pic --enable-postproc --enable->runtime-cpudetect --enable-shared --enable-swresample --enable-vdpau -->enable-version3 --enable-x11grab
libavutil 52. 66.100 / 52. 66.100
libavcodec 55. 52.102 / 55. 52.102
libavformat 55. 33.100 / 55. 33.100
libavdevice 55. 10.100 / 55. 10.100
libavfilter 4. 2.100 / 4. 2.100
libavresample 1. 2. 0 / 1. 2. 0
libswscale 2. 5.102 / 2. 5.102
libswresample 0. 18.100 / 0. 18.100
libpostproc 52. 3.100 / 52. 3.100
[flv @ 0xae7050a0] warning: first frame is no keyframe 0B f=0/0
Input #0, swf, from 'http://10.251.251.14:8090/cam.swf': 0B f=0/0
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: flv1, yuv420p, 640x400, 25 fps, 25 tbr, 25 tbn
[flv @ 0xae7050a0] warning: first frame is no keyframe
^C[root@MyArch vago]# ^C 0 aq= 0KB vq= 0KB sq= 0B f=0/0

хотя в консоль ffserver все-таки идет:

Thu Jul 24 10:38:10 2014 10.251.251.14 - - New connection: GET /te=5092.5kbits/s
Thu Jul 24 10:38:10 2014 10.251.251.14 - - [GET] «/ HTTP/1.1» 200 1620

До 100 http://itmages.ru/image/view/1800048/b37108af

После 100 http://itmages.ru/image/view/1800056/fa14e9c0

el_vago ()
Ответ на: комментарий от el_vago

Вещание работает.

Thu Jul 24 10:38:10 2014 10.251.251.14 - - New connection: GET /te=5092.5kbits/s
Thu Jul 24 10:38:10 2014 10.251.251.14 - - [GET] «/ HTTP/1.1» 200 1620
Это запрос статусной страницы http://10.251.251.14:8090/ от браузера. В этом нет криминала.

ffplay как и VLC идет без разрывов, проблемы в браузере возникают

Ты сам ответил на свой вопрос. ffserver здесь ни причем.

Как лечить, фиг его знает. Если рвет стабильно на 100МБ, то может соединение идет через прокси, и это он режет? Я от вешания живого потока через http отказался. Перепробовал всякого разного. Или рвется, или задержка невыносимая. Ну его нах. Сейчас только rtsp использую.

fopen ★★ ()
Ответ на: комментарий от el_vago

Например, так:

Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 10000000
RTSPPort 4545
CustomLog -

<Feed feed1.ffm>
    Launch ffmpeg -f v4l2 -re -r 25 -i /dev/video14                                                                           
    File /tmp/feed1.ffm
    FileMaxSize 1M
    ACL allow localhost
</Feed>

<Stream mosaic.mpg>
    Feed feed1.ffm
    Format rtp 
    NoAudio
    VideoCodec mpeg4
    VideoSize 1280x720
    VideoFrameRate 25    
    StartSendOnKey
    VideoBitRate 5000
    AVOptionVideo flags +global_header 
    AVOptionVideo qmin 1
    AVOptionVideo qmax 30
    AVOptionVideo minrate 3M
    AVOptionVideo maxrate 5M
</Stream>

<Stream stat.html>
    Format status
    ACL allow localhost
    ACL allow 192.168.0.0 192.168.255.255
</Stream>

<Redirect index.html>
    URL stat.html
</Redirect>

fopen ★★ ()
Ответ на: комментарий от fopen

И надеюсь последний глупый вопрос. Какая тогда ссылка на видео? А то у меня при переходе со статусной страницы: File ??cam.rtsp? not found

el_vago ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.