【发布时间】: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