Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 设置开始时间时GStreamer qtdemux问题_Video_Ffmpeg_Gstreamer_Mp4 - Fatal编程技术网

Video 设置开始时间时GStreamer qtdemux问题

Video 设置开始时间时GStreamer qtdemux问题,video,ffmpeg,gstreamer,mp4,Video,Ffmpeg,Gstreamer,Mp4,我正在使用GStreamer将视频流式传输到RTSP,我收到的很多视频都有问题。我有数千个视频是用FFMPEG到mp4录制的。我无法播放任何视频,因为qtdemux报告了以下错误: qtdemux qtdemux.c:9129:qtdemux_parse_segments:segments 0扩展到4:57:00.937000000,超过文件持续时间的结尾0:00:59.544000000它将被截断 qtdemux qtdemux.c:9129:qtdemux_parse_segments:se

我正在使用GStreamer将视频流式传输到RTSP,我收到的很多视频都有问题。我有数千个视频是用FFMPEG到mp4录制的。我无法播放任何视频,因为qtdemux报告了以下错误:

qtdemux qtdemux.c:9129:qtdemux_parse_segments:segments 0扩展到4:57:00.937000000,超过文件持续时间的结尾0:00:59.544000000它将被截断
qtdemux qtdemux.c:9129:qtdemux_parse_segments:segment1扩展到4:58:00.481000000,文件持续时间结束后4:57:00.937000000将被截断

据我所知,这与视频的开始部分有关。以下是同一视频的ffprobe输出:

  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : libRtspServer
    encoder         : Lavf58.20.100
  Duration: 00:00:59.07, start: 5461.268000, bitrate: 2749 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 2748 kb/s, 15.02 fps, 15 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      handler_name    : VideoHandler
[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=Main
codec_type=video
codec_time_base=29533/887000
codec_tag_string=avc1
codec_tag=0x31637661
width=1920
height=1080
coded_width=1920
coded_height=1080
has_b_frames=0
sample_aspect_ratio=1:1
display_aspect_ratio=16:9
pix_fmt=yuvj420p
level=41
color_range=pc
color_space=bt709
color_transfer=bt709
color_primaries=bt709
chroma_location=center
field_order=unknown
timecode=N/A
refs=1
is_avc=true
nal_length_size=4
id=N/A
r_frame_rate=15/1
avg_frame_rate=443500/29533
time_base=1/90000
start_pts=491514120
start_time=5461.268000
duration_ts=496830060
duration=5520.334000
bit_rate=2748339
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=887
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
TAG:language=und
TAG:handler_name=VideoHandler
[/STREAM]
注意开始时间-开始时间=5461.268000

一种可能的解决方案是将所有视频的重放,使其开始时间为0.00。这似乎不是理想的解决方案


有没有办法操纵GStreamer从时间0开始播放视频,而不是试图寻找开始时间?可能是视频编写不正确。

您的GStreamer版本是什么?这听起来像是一个大mp4的片段-因此每个mp4都有非零开始时间?您看到的警告是mp4流长度大于mp4文件的总长度。这是引入了检查和截断:随机ffmpeg票证的补丁,您是正确的,因为这实际上是一个大mp4的片段。一个视频流被解码并写入一分钟的块中。然后,真正的问题是,您只需要重新复制mp4,以便视频流的时间与文件的总时间一致(不确定这到底是如何工作的),应该可以在不重新编码的情况下完成这项工作(因此速度很快)。也许像这样,你需要修复你的ffmpeg录制管道来正确计时。