FFMPEG:使用movflags将MP4多路复用数据重定向到套接字会重置时间戳

时间:2014-09-01 08:24:32

标签: ffmpeg mp4

我正在使用FFMPEG库将H.264和AAC帧复用到MP4文件。我做那个C程序。 我以时代格式存储H.264和AAC帧的时间戳。

我使用ffprobe来检查存储在MP4文件中的时间戳,ffprobe确认该文件是MP4格式并且时间戳正确存储。下面是ffprobe的输出。

  

ffprobe -show_packets 20140805095931.mp4

    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20140805095931.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf54.29.104
  Duration: 00:01:39.70, start: 1407232771.984000, bitrate: 1063 kb/s
    Stream #0.0(und): Video: h264 (High), yuv420p, 960x540, 999 kb/s, 30 fps, 59.94 tbr, 1k tbn, 60 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, mono, s16, 53 kb/s
[PACKET]
codec_type=video
stream_index=0
pts=1407232771984
pts_time=1407232771.984000 
dts=1407232771984
dts_time=1407232771.984000 
duration=34
duration_time=0.034000 
size=24556.000000 
pos=48
flags=K
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1407232772018
pts_time=1407232772.018000 
dts=1407232772018
dts_time=1407232772.018000 
duration=33
duration_time=0.033000 
size=3180.000000 
pos=24604
flags=_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1407232772051
pts_time=1407232772.051000 
dts=1407232772051
dts_time=1407232772.051000 
duration=33
duration_time=0.033000 
size=3209.000000 
pos=27784
flags=_
[/PACKET]

我的目标是从MP4文件读取这个多路复用的MP4数据,并通过套接字将这个多路复用的mp4数据发送到客户端,而不创建任何临时文件。我的实际目标是编写一个C程序。

我尝试使用协议tcp和udp,但他们没有使用Mp4格式,并给出如下错误。

  

ffmpeg -i 20140805095931.mp4 -f mp4 -vcodec copy tcp://10.99.19.163:8888

     

[mp4 @ 0xb1e1920] muxer不支持非可搜索输出
  无法为输出文件#0写入标头(编解码器参数不正确?):参数无效

所以,我在某处阅读了关于moov atom的内容并尝试了以下命令

  

ffmpeg -i 20140805095931.mp4 -movflags isml + frag_keyframe -f mp4 -vcodec copy tcp://10.99.19.163:8888

使用上面的命令行我可以使用ffmpeg支持的tcp协议将mp4文件发送到客户端。

但是当我在MP4文件上应用ffprobe时,时间戳重置为0,即使starttime也变为0.0000。下面是ffmpeg的输出。

  

ffprobe -show_packets out.mp4

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'out.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.48.100
  Duration: 00:01:39.71, start: 0.000000, bitrate: 1059 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 960x540, 999 kb/s, 30 fps, 30 tbr, 16k tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 53 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
[PACKET]
codec_type=video
stream_index=0
pts=0
pts_time=0.000000
dts=0
dts_time=0.000000
duration=533
duration_time=0.033313
convergence_duration=N/A
convergence_duration_time=N/A
size=24556
pos=3853
flags=K
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=544
pts_time=0.034000
dts=544
dts_time=0.034000
duration=533
duration_time=0.033313
convergence_duration=N/A
convergence_duration_time=N/A
size=3180
pos=28409
flags=_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1072
pts_time=0.067000
dts=1072
dts_time=0.067000
duration=533
duration_time=0.033313
convergence_duration=N/A
convergence_duration_time=N/A
size=3209
pos=31589
flags=_
[/PACKET]

任何帮助或建议?提前谢谢。

0 个答案:

没有答案