Opened 5 years ago

Last modified 5 years ago

#7974 new defect

RTSP h265 input produces invalid MP4 output with -c copy

Reported by: Kenny Levinsen Owned by:
Priority: normal Component: avcodec
Version: git-master Keywords:
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:

Taking a RTSP HEVC main profile input from a HikVision IP PTZ camera, and producing an mp4 with -c copy, results in an invalid mp4 file.

Reading this mp4 file results in the following errors:

[AVBSFContext @ 0x55f87e9a1f00] No start code is found.
/tmp/test3.mp4: Invalid data found when processing input

VLC, mpv and ffmpeg are all unable to read the file, despite all being able to play the stream live without problem. However, if one outputs to a TS file, the output is entirely usable, and can afterwards be remuxed to mp4 without issue.

The issue seems identical to this mailing list post from 2017, which unfortunately had no followup: https://ffmpeg.org/pipermail/libav-user/2017-November/010762.html.

How to reproduce:

% ffmpeg -i rtsp://user:pass@192.168.1.64/Streaming/Channels/1 -c copy /tmp/test3.mp4
ffmpeg version 4.1.3-4154f89 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9 (GCC)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --docdir=/usr/share/doc/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' --extra-ldflags='-Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' --enable-bzlib --enable-libdrm --disable-crystalhd --enable-fontconfig --enable-frei0r --enable-gcrypt --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libcdio --enable-indev=jack --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libmp3lame --enable-libkvazaar --enable-nvenc --extra-cflags=-I/usr/include/nvenc --enable-openal --enable-opencl --enable-libopenh264 --enable-libmysofa --enable-libshine --enable-libzvbi --enable-libvidstab --enable-libvmaf --enable-version3 --enable-libaom --enable-opengl --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --enable-decoder=libdav1d --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
[hevc @ 0x5602f1ee0f80] VPS 0 does not exist
    Last message repeated 1 times
Input #0, rtsp, from 'rtsp://user:pass@192.168.1.64/Streaming/Channels/1':
  Metadata:
    title           : Media Presentation
  Duration: N/A, start: 0.040000, bitrate: N/A
    Stream #0:0: Video: hevc (Main), yuv420p(tv), 2560x1440, 50 fps, 25 tbr, 90k tbn, 50 tbc
Output #0, mp4, to '/tmp/test3.mp4':
  Metadata:
    title           : Media Presentation
    encoder         : Lavf58.20.100
    Stream #0:0: Video: hevc (Main) (hev1 / 0x31766568), yuv420p(tv), 2560x1440, q=2-31, 50 fps, 25 tbr, 90k tbn, 90k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x5602f1f14600] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
[mp4 @ 0x5602f1f14600] Non-monotonous DTS in output stream 0:0; previous: 0, current: 0; changing to 1. This may result in incorrect timestamps in the output file.
frame=  167 fps= 29 q=-1.0 Lsize=   11434kB time=00:00:06.60 bitrate=14191.4kbits/s speed=1.14x
video:11432kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.015932%
Exiting normally, received signal 2.

% ffprobe /tmp/test3.mp4
ffprobe version 4.1.3-4154f89 Copyright (c) 2007-2019 the FFmpeg developers
  built with gcc 9 (GCC)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --docdir=/usr/share/doc/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' --extra-ldflags='-Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' --enable-bzlib --enable-libdrm --disable-crystalhd --enable-fontconfig --enable-frei0r --enable-gcrypt --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libcdio --enable-indev=jack --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libmp3lame --enable-libkvazaar --enable-nvenc --extra-cflags=-I/usr/include/nvenc --enable-openal --enable-opencl --enable-libopenh264 --enable-libmysofa --enable-libshine --enable-libzvbi --enable-libvidstab --enable-libvmaf --enable-version3 --enable-libaom --enable-opengl --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --enable-decoder=libdav1d --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
[AVBSFContext @ 0x55f87e9a1f00] No start code is found.
/tmp/test3.mp4: Invalid data found when processing input

Test with 4.1.3, as well as bb11584924d6190a9028cbb319891028f44856a9.

Attachments (3)

test.mp4.log (11.3 KB ) - added by Kenny Levinsen 5 years ago.
Debug log from ffmpeg run producing "test.mp4"
test.ts.log (12.6 KB ) - added by Kenny Levinsen 5 years ago.
Debug log from ffmpeg run producing "test.ts"
test.mp4.vlc.log (11.3 KB ) - added by Kenny Levinsen 5 years ago.
Debug log from vlc playing "test.mp4"

Download all attachments as: .zip

Change History (4)

by Kenny Levinsen, 5 years ago

Attachment: test.mp4.log added

Debug log from ffmpeg run producing "test.mp4"

by Kenny Levinsen, 5 years ago

Attachment: test.ts.log added

Debug log from ffmpeg run producing "test.ts"

by Kenny Levinsen, 5 years ago

Attachment: test.mp4.vlc.log added

Debug log from vlc playing "test.mp4"

comment:1 by Kenny Levinsen, 5 years ago

I have uploaded the mp4/ts files using the videolan file uploader (https://streams.videolan.org/upload/#)

Note: See TracTickets for help on using tickets.