【问题标题】:playing mp4 video without file header播放没有文件头的 mp4 视频
【发布时间】:2020-07-07 20:17:11
【问题描述】:

我正在为摄像机构建一些硬件和软件。硬件在将数据写入 SD 卡时捕获数据,并将数据传输到显示视频的 PC。

我需要帮助来解码和显示没有 mp4 文件标题的视频。对应视频启动后的采集和显示视频。

我可以使用 Gstreamer 播放我的示例视频

gst-launch-1.0 filesrc location=full.mp4 ! qtdemux name=demux demux.video_0 ! queue ! decodebin ! videoconvert ! videoscale ! autovideosink

如果我取文件的中间部分

tail -c $(( 10*1024*1024 )) full.mp4 | head -c $(( 5*1024*1024 )) > middle.mp4

-我不知道如何播放文件了。

我的问题是: 如何播放缺少 mp4 文件头的文件?

有关示例视频 (full.mp4) 的额外信息

gst-discoverer-1.0 file:///home/username/Videos/full.mp4 -v
Analyzing file:///home/quist/Videos/full.mp4
Done discovering file:///home/quist/Videos/full.mp4

Topology:
  container: video/quicktime
    audio: audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2
      Tags:
        audio codec: MPEG-4 AAC audio
        maximum bitrate: 256000
        bitrate: 3108
        language code: en
        encoder: Lavf55.33.100
        container format: Quicktime
      
      Codec:
        audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2
      Additional info:
        None
      Stream ID: ac6b090d044d63146735090a310b819cd64304c2ee05c9ee590009622318d12b/002
      Language: en
      Channels: 2 (front-left, front-right)
      Sample rate: 44100
      Depth: 32
      Bitrate: 3108
      Max bitrate: 256000
    video: video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4.1, profile=(string)high, codec_data=(buffer)01640029ffe1001967640029acd9405005bb0110000003001000000780f183196001000468efbcb0, width=(int)1280, height=(int)720, framerate=(fraction)60/1, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true
      Tags:
        video codec: H.264 / AVC
        language code: en
        bitrate: 8082504
        encoder: Lavf55.33.100
        container format: Quicktime
      
      Codec:
        video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4.1, profile=(string)high, codec_data=(buffer)01640029ffe1001967640029acd9405005bb0110000003001000000780f183196001000468efbcb0, width=(int)1280, height=(int)720, framerate=(fraction)60/1, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true
      Additional info:
        None
      Stream ID: ac6b090d044d63146735090a310b819cd64304c2ee05c9ee590009622318d12b/001
      Width: 1280
      Height: 720
      Depth: 24
      Frame rate: 60/1
      Pixel aspect ratio: 1/1
      Interlaced: false
      Bitrate: 8082504
      Max bitrate: 0

Properties:
  Duration: 0:00:18.167000000
  Seekable: yes
  Live: no
  Tags: 
      video codec: H.264 / AVC
      language code: en
      bitrate: 8082504
      encoder: Lavf55.33.100
      container format: Quicktime
      audio codec: MPEG-4 AAC audio
      maximum bitrate: 256000

【问题讨论】:

  • 你没有。 MP4 不是流文件格式。您可以使用碎片化的 MP4 文件来改善这种情况 - 但我认为您需要另一种文件格式..
  • 如果不涉及声音,则只需发送视频图片(编码为 H.264),无需先放入 MP4 容器。 H264 可以逐帧流式传输。
  • 我对音频不感兴趣。视频是 stream-format=avc,据我了解,它不适合流式传输。当我进入数据流时,如何将视频传递给解码器?摄像机的视频分辨率、比特率和帧率总是相同的,所以我想我需要用这些信息预加载解码器,然后它们输入 H.264 帧。你能帮我建立一个 Gstreamer 管道吗?

标签: video gstreamer mp4 h.264 quicktime


【解决方案1】:

你不能用头/尾截断 MP4 - 你可以用 MPEG-2 传输流来做到这一点,可能并非完全没有问题。

但你可以使用 ffmpeg 代替 head/tail:

ffmpeg -i full.mp4 -vcodec copy -acodec copy -ss 00:10:00 -to 00:20:00 middle.mp4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2011-11-01
    相关资源
    最近更新 更多