Anton Serov
Anton Serov

Reputation: 301

Make GStreamer correctly read FLV files with corrupt video info

I have a set of FLV files which I want to play with GStreamer. All files have incorrect header/metadata, like this one:

https://drive.google.com/file/d/1FcKbYd2-D7ZiIG5VpRxpbqshCixp8iaR/view?usp=sharing

Both VLC and ffplay are able to play this file using their special magic. Although, Mediainfo shows truncated video info for the file:

Video
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Codec ID                                 : 7
Duration                                 : 12 s 633 ms
Frame rate mode                          : Constant
Frame rate                               : 60.000 FPS
Bit depth                                : 8 bits

For correct files there are at least the format profile and level.

gst-discoverer-1.0 doesn't want to detect the video stream at all:

Properties:
  Duration: 0:00:00.116000000
  Seekable: yes
  Live: no
  container: Flash
    audio: MPEG-4 AAC
      Stream ID: a72c1038e0bf52d7668cb945588d7bca2547bd58212aa7f08db439aeadfcbd95/audio
      Language: <unknown>
      Channels: 2 (front-left, front-right)
      Sample rate: 48000
      Depth: 32
      Bitrate: 0
      Max bitrate: 0
    video: H.264
      Stream ID: (NULL)
      Width: 0
      Height: 0
      Depth: 0
      Frame rate: 0/1
      Pixel aspect ratio: 1/1
      Interlaced: false
      Bitrate: 0
      Max bitrate: 0

gst-play-1.0 launches, but shows errors and doesn't show the preview:

gst-play-1.0.exe "C:\Users\me\Downloads\custom.flv"
Press 'k' to see a list of keyboard shortcuts.
Now playing C:\Users\me\Downloads\custom.flv
WARNING No decoder available for type 'video/x-h264, stream-format=(string)avc, codec_data=(buffer)000000016742c020da014016ec0440000003004000001e03c60ca80000000168ce3c80'.
WARNING debug information: ../gst/playback/gsturidecodebin.c(960): unknown_type_cb (): /GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0
Redistribute latency...
0:00:12.6 / 0:00:12.6
Reached end of play list.

I'm looking for any way to either make GStreamer play such files correctly (maybe there is some plugin that allows to do so?) or to fix the video header.

Upvotes: 1

Views: 296

Answers (2)

Anton Serov
Anton Serov

Reputation: 301

The problem was in the video header. To generate the header I was using the extra data returned by FFmpeg encoder. But the header is not just the extra data, it should rather be generated as AVCDecoderConfigurationRecord structure following ISO/IEC-14496-15 standard.

Upvotes: 1

Florian Zwoch
Florian Zwoch

Reputation: 7383

Remux your video file with FFMPEG:

ffmpeg -i custom.flv -c:v copy -c:a copy fixed.flv

Upvotes: 1

Related Questions