我正在使用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]
任何帮助或建议?提前谢谢。