Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Ошибка avconv/ffmpeg  (Прочитано 12589 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн arhiv_6

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
    • http://arhiv6.blogspot.com/
Ошибка avconv/ffmpeg
« : 25 Июля 2013, 23:58:40 »
Пытаюсь с помощью avconv/ffmpeg  rtsp поток c h264 видео запаковать в .flv контейнер и отдать по rtmp, чтобы выводить на сайте с помощью jwplayer. К сожалению, почти сразу падает с ошибкой (иногда несколько секунд работает, картинка есть):

avconv  -rtsp_transport tcp -i "rtsp://user@x.x.x.x:x/user=user&password=&channel=1&stream=1.sdp" -vcodec copy -an -f flv rtmp://127.0.0.1/live/cam1

ffmpeg version 0.10.7-6:0.10.7-0jon1~precise Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul 15 2013 21:27:54 with gcc 4.6.3
  configuration: --arch=amd64 --disable-stripping --enable-pthreads --enable-runtime-cpudetect --extra-version='6:0.10.7-0jon1~precise' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-libcdio --enable-x11grab --enable-libx264 --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
  libavutil      51. 35.100 / 51. 35.100
  libavcodec     53. 61.100 / 53. 61.100
  libavformat    53. 32.100 / 53. 32.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 61.100 /  2. 61.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  6.100 /  0.  6.100
  libpostproc    52.  0.100 / 52.  0.100
[rtsp @ 0x23b06e0] Estimating duration from bitrate, this may be inaccurate
Input #0, rtsp, from 'rtsp://user@x.x.x.x:x/user=user&password=&channel=1&stream=1.sdp':
  Metadata:
    title           : RTSP Session
  Duration: N/A, start: 0.001000, bitrate: N/A
    Stream #0:0: Video: h264 (High), yuv420p, 704x576, 90k tbr, 90k tbn, 180k tbc
Output #0, flv, to 'rtmp://127.0.0.1/live/cam1':
  Metadata:
    title           : RTSP Session
    encoder         : Lavf53.32.100
    Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 704x576, q=2-31, 1k tbn, 90k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[flv @ 0x23b9a00] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 168 >= 168
av_interleaved_write_frame(): Invalid argument

пробовал версию из репозитория и последнюю сборку с ppa, ведут себя одинаково. Как решить эту проблему?

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Ошибка avconv/ffmpeg
« Ответ #1 : 26 Июля 2013, 00:26:01 »
arhiv_6, установить вместо avconv нормальный ffmpeg из git-а?

Оффлайн arhiv_6

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
    • http://arhiv6.blogspot.com/
Re: Ошибка avconv/ffmpeg
« Ответ #2 : 26 Июля 2013, 00:35:14 »
Я ffmpeg и ставил, avconv с ним установился :)  Ставил не из git, а из Jon Severinsson's FFmpeg PPA - это почти офф. репозиторий со сборками ffmpega (ссылка на этот репозиторий взята со страницы загрузки ffmpeg). Как видно из лога в первом сообщении - сборка свежая, от 15 июля. Запуск ffmpeg вместо avconv приводит к той же ошибке.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Ошибка avconv/ffmpeg
« Ответ #3 : 26 Июля 2013, 00:43:12 »
arhiv_6, покажи команду для ffmpeg без всякой мути и mediainfo того файла, над которым шаманишь (тестируешь), тогда попробую у себя поковырять.

Оффлайн arhiv_6

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
    • http://arhiv6.blogspot.com/
Re: Ошибка avconv/ffmpeg
« Ответ #4 : 26 Июля 2013, 00:58:34 »
Команда есть в первом посте. На входе - не файл а поток с видеорегистратора. Извини, ссылку на поток дать не могу... Что под мутью понимается? В той команде только часть адреса потока изменёна на user@x.x.x.x:x.

Т.к. это поток, инфу могу посмотреть с помощью vlc:
Кодек: H264 - MPEG-4 AVC (part 10) (h264)
Разрешение: 1920x1080
Декодированный формат: Planar 4:2:0 YUV

Попробовал сохранить в файл командой:
ffmpeg -y  -rtsp_transport tcp -i "rtsp://user@x.x.x.x:x/user=user&password=&channel=1&stream=0.sdp" -vcodec copy -an -f flv ~/test.flvчерез несколько секунд вылетело с той же ошибкой. Вот mediainfo по тому, что успело сохраниться:
(Нажмите, чтобы показать/скрыть)

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Ошибка avconv/ffmpeg
« Ответ #5 : 26 Июля 2013, 01:49:29 »
arhiv_6, а если кусок видео записать vlc (копировать сам поток, без конвертации), а потом попробовать переконвертировать в flv Такая ошибка вылезет или если использовать другой контейнер? Только для пробы, хочется установить причину.

Оффлайн arhiv_6

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
    • http://arhiv6.blogspot.com/
Re: Ошибка avconv/ffmpeg
« Ответ #6 : 26 Июля 2013, 07:36:43 »
Командой
cvlc -vvv "rtsp://user@x.x.x.x:x/user=user&password=&channel=6&stream=0.sdp" --http-caching=5000 --sout-ffmpeg-rc-buffer-size=1835008 --no-sout-audio --sout '#file{mux=mp4,access=file,dst='/home/niro/1.mp4'}'сохранил поток в контейнер mp4 без перекодирования. Полученный файл отдал ffmpeg-у, но всё равно та же ошибка, даже если не менять контейнер и кодек:
ffmpeg -y  -i /home/niro/1.mp4 -vcodec copy  -an -f mp4  ~/test.mp4
ffmpeg version 0.8.6-6:0.8.6-1ubuntu2, Copyright (c) 2000-2013 the Libav developers
  built on Mar 30 2013 22:20:06 with gcc 4.7.2
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[h264 @ 0x1ca7e00] error while decoding MB 76 13, bytestream (-70)
[h264 @ 0x1ca7e00] concealing 6573 DC, 6573 AC, 6573 MV errors

Seems stream 0 codec frame rate differs from container frame rate: 2002.00 (2002/1) -> 1001.00 (2002/2)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/niro/1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: mp41avc1qt 
    creation_time   : 2013-07-26 03:14:47
    encoder         : vlc 2.0.6 stream output
    encoder-eng     : vlc 2.0.6 stream output
  Duration: 00:00:44.58, start: 0.000000, bitrate: 4732 kb/s
    Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080, 4730 kb/s, 17.34 fps, 1001 tbr, 1001 tbn, 2002 tbc
    Metadata:
      creation_time   : 2013-07-26 03:14:47
Output #0, mp4, to '/home/niro/test.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: mp41avc1qt 
    creation_time   : 2013-07-26 03:14:47
    encoder-eng     : vlc 2.0.6 stream output
    encoder         : Lavf53.21.1
    Stream #0.0(eng): Video: ![0][0][0] / 0x0021, yuv420p, 1920x1080, q=2-31, 4730 kb/s, 1001 tbn, 1001 tbc
    Metadata:
      creation_time   : 2013-07-26 03:14:47
Stream mapping:
  Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
[mp4 @ 0x1ca8d00] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 47 >= 47
av_interleaved_write_frame(): Invalid argument

Если пытаться сохранить в другой контейнер, всё равно ошибка выскакивает.
Ещё можно сохранить в raw видео, работает без проблем. Но мне нужно оставить исходный h264 :( :

ffmpeg -y -loglevel debug -rtsp_transport tcp -re -i "rtsp://user@x.x.x.x:x/user=user&password=&channel=3&stream=0.sdp"  -an -f flv ~/tt.flv
ffmpeg version 0.8.6-6:0.8.6-1ubuntu2, Copyright (c) 2000-2013 the Libav developers
  built on Mar 30 2013 22:20:06 with gcc 4.7.2
  configuration: --arch=amd64 --enable-pthreads --enable-runtime-cpudetect --extra-version='6:0.8.6-1ubuntu2' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-gnutls --enable-libgsm --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-swscale --enable-libcdio --enable-x11grab --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
  libavutil    51. 22. 1 / 51. 22. 1
  libavcodec   53. 35. 0 / 53. 35. 0
  libavformat  53. 21. 1 / 53. 21. 1
  libavdevice  53.  2. 0 / 53.  2. 0
  libavfilter   2. 15. 0 /  2. 15. 0
  libswscale    2.  1. 0 /  2.  1. 0
  libpostproc  52.  0. 0 / 52.  0. 0
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[rtsp @ 0x2598cc0] SDP:
v=0
o=- 38990265062388 38990265062388 IN IP4 192.168.1.100
s=RTSP Session
c=IN IP4 192.168.1.100
t=0 0
a=control:*
a=range:npt=0-
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=range:npt=0-
a=framerate:0S
a=fmtp:96 profile-level-id=640028; packetization-mode=1; sprop-parameter-sets=Z2QAKK2EBUViuKxUdCAqKxXFYqOhAVFYrisVHQgKisVxWKjoQFRWK4rFR0ICorFcVio6ECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZprQDwBE/Kg==,aO48sA==
a=framerate:25
a=control:trackID=3

[rtsp @ 0x2598cc0] video codec set to: h264
[NULL @ 0x259cec0] RTP Profile IDC: 64 Profile IOP: 0 Level: 28
[NULL @ 0x259cec0] RTP Packetization Mode: 1
[NULL @ 0x259cec0] Extradata set to 0x259d4e0 (size: 101)!hello state=0
[h264 @ 0x259cec0] err{or,}_recognition separate: 1; 1
[h264 @ 0x259cec0] err{or,}_recognition combined: 1; 1
[h264 @ 0x259cec0] Unsupported bit depth: 0
[rtsp @ 0x2598cc0] All info found
[rtsp @ 0x2598cc0] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 180000.00 (180000/1) -> 1000.00 (1000/1)
Input #0, rtsp, from 'rtsp://user@x.x.x.x:x/user=user&password=&channel=3&stream=0.sdp':
  Metadata:
    title           : RTSP Session
  Duration: N/A, start: 0.048000, bitrate: N/A
    Stream #0.0, 22, 1/90000: Video: h264 (High), yuv420p, 1920x1080, 1/180000, 1k tbr, 90k tbn, 180k tbc
[buffer @ 0x259aaa0] w:1920 h:1080 pixfmt:yuv420p
[flv @ 0x25a22c0] err{or,}_recognition separate: 1; 1
[flv @ 0x25a22c0] err{or,}_recognition combined: 1; 1
[h264 @ 0x259cec0] err{or,}_recognition separate: 1; 1
[h264 @ 0x259cec0] err{or,}_recognition combined: 1; 1
Output #0, flv, to '/home/niro/tt.flv':
  Metadata:
    title           : RTSP Session
    encoder         : Lavf53.21.1
    Stream #0.0, 0, 1/1000: Video: flv, yuv420p, 1920x1080, 1/1000, q=2-31, 200 kb/s, 1k tbn, 1k tbc
Stream mapping:
  Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
^Cframe=   13 fps= 10 q=24.8 Lsize=     393kB time=1.33 bitrate=2425.1kbits/s dup=0 drop=2   
video:392kB audio:0kB global headers:0kB muxing overhead 0.109501%
Received signal 2: terminating.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Ошибка avconv/ffmpeg
« Ответ #7 : 26 Июля 2013, 08:58:38 »
arhiv_6, vlc не пойдёт? Возможно это баг ffmpeg.

Оффлайн arhiv_6

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
    • http://arhiv6.blogspot.com/
Re: Ошибка avconv/ffmpeg
« Ответ #8 : 26 Июля 2013, 09:07:04 »
Надо отдавать поток в rtmp виде, а vlc этого не умеет :(

Оффлайн anubis_donetsk

  • Участник
  • *
  • Сообщений: 188
  • ничто не совершенно кроме freebsd
    • Просмотр профиля
Re: Ошибка avconv/ffmpeg
« Ответ #9 : 26 Июля 2013, 10:52:49 »
автор, где вы нашли такой рецепт трансляции с помощью ffmpeg ??? в ffmpeg есть стрим сервер ffserver, с помощью его и вещайте, но я бы лучше использовал wowza media server

Оффлайн arhiv_6

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
    • http://arhiv6.blogspot.com/
Re: Ошибка avconv/ffmpeg
« Ответ #10 : 26 Июля 2013, 11:43:10 »
Да нормальный это способ, эта же конструкция (в связке с nginx-rtmp) отлично работала, когда на входе был mjpeg (из mjpeg получал h264 и транслировал его по rtmp, а тут даже пережимать по идее не надо, только транспорт и поменять). в таком варианте ffmteg запускается прямо из nginx, а nginx отдаёт видео клиентам (https://github.com/arut/nginx-rtmp-module#example-nginxconf + на хабре есть несколько статей про это дело).
В общем, пока ищу способ сделать это средствами ffmpeg, если с ним не получится, буду пробовать другие варианты.

Оффлайн anubis_donetsk

  • Участник
  • *
  • Сообщений: 188
  • ничто не совершенно кроме freebsd
    • Просмотр профиля
Re: Ошибка avconv/ffmpeg
« Ответ #11 : 26 Июля 2013, 15:17:44 »
а если так
avconv  -rtsp_transport tcp -i "rtsp://user@x.x.x.x:x/user=user&password=&channel=1&stream=1.sdp" -vcodec copy -an -f mp4 rtmp://127.0.0.1/live/cam1

Оффлайн arhiv_6

  • Автор темы
  • Любитель
  • *
  • Сообщений: 53
    • Просмотр профиля
    • http://arhiv6.blogspot.com/
Re: Ошибка avconv/ffmpeg
« Ответ #12 : 26 Июля 2013, 19:25:28 »
Та же самая ошибка...

Оффлайн Пользователь

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 2700
  • Runtu XFCE 18.04 (64-bit)
    • Просмотр профиля
Re: Ошибка avconv/ffmpeg
« Ответ #13 : 26 Июля 2013, 20:45:25 »
Возможно это баг ffmpeg.

Согласен.

Выход: использовать версию старее, в которой бага не было или использовать другую программу.
А новую версию с багфиксом неизвестно когда выпустят - нужно шерстить интернет ресурсы проекта ffmpeg.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Ошибка avconv/ffmpeg
« Ответ #14 : 26 Июля 2013, 21:14:45 »
arhiv_6, Пользователь, http://trac.ffmpeg.org/ticket/2212 там гляньте. Это баг, но его можно обойти.
И это http://webcache.googleusercontent.com/search?q=cache:vYhUmYmT7tMJ:ubuntuforums.org/showthread.php%3Ft%3D1964103+&cd=6&hl=ru&ct=clnk&client=ubuntu
Пока сайт  http://ubuntuforums.org/announce.html?t=1964103 пока сайт не поднимут даю ссылку на кеш гугла и на всякий случай (вдруг перекешируют) прикрепляю HTML из того кеша.
« Последнее редактирование: 26 Июля 2013, 21:23:26 от peregrine »

 

Страница сгенерирована за 0.035 секунд. Запросов: 25.