转自:http://bashell.nodemedia.cn/archives/ffmpeg-save-h264-stream-to-mp4-file.html
上篇使用pipe播放流后,观看的同时,如需保存成文件,使用ffmpeg也是很方便的.
既然已经是标准H264了,那就不需要再编码,直接copy流再muxer
|
_______
______________
________
|
|
|
|
|
|
|
input
|
demuxer
|
encoded
data
|
muxer
|
output
|
|
file
|
--
--
--
--
-
&
gt
;
|
packets
|
--
--
--
-
&
gt
;
|
file
|
|
_______
|
|
______________
|
|
________
|
|
代码原型请看这个这个回复,不过他的代码中,视频输出流的AVCodecContext
|
AVCodecContext
*
c
;
c
=
o_video_stream
->
codec
;
|
缺少了extradata,造成生成的MP4文件avcC没有SPS PPS信息而无法播放
添加如下代码
|
c
->
extradata
=
i_video_stream
->
codec
->
extradata
;
c
->
extradata_size
=
i_video_stream
->
codec
->
extradata_size
;
|
另外不需要两次打开输入流,完全是可以在播放开始后任意时间来控制开始保存文件.
使用mp4封装,在Android IOS上均可调用系统自带播放器播放
上篇使用pipe播放流后,观看的同时,如需保存成文件,使用ffmpeg也是很方便的.
既然已经是标准H264了,那就不需要再编码,直接copy流再muxer
|
_______
______________
________
|
|
|
|
|
|
|
input
|
demuxer
|
encoded
data
|
muxer
|
output
|
|
file
|
--
--
--
--
-
&
gt
;
|
packets
|
--
--
--
-
&
gt
;
|
file
|
|
_______
|
|
______________
|
|
________
|
|
代码原型请看这个这个回复,不过他的代码中,视频输出流的AVCodecContext
|
AVCodecContext
*
c
;
c
=
o_video_stream
->
codec
;
|
缺少了extradata,造成生成的MP4文件avcC没有SPS PPS信息而无法播放
添加如下代码
|
c
->
extradata
=
i_video_stream
->
codec
->
extradata
;
c
->
extradata_size
=
i_video_stream
->
codec
->
extradata_size
;
|
另外不需要两次打开输入流,完全是可以在播放开始后任意时间来控制开始保存文件.
使用mp4封装,在Android IOS上均可调用系统自带播放器播放