srs3.0支持mp4文件的录制,本文在参考3.0的基础上,实现了2.0版本的dvr。
整个录制的流程从SrsSource::on_video_imp(SrsSharedPtrMessage* msg)函数和SrsSource::on_audio_imp(SrsSharedPtrMessage* msg)作为入口,如下图所示。
上图SrsFormat类和重载的video_avc_demux(char* data, int size, SrsFormat* format)函数需要实现,在srs_kernel_codec源文件中。SrsFormat存放video_avc_demux函数解析tag包出来的媒体信息。
上图中重载的video_aac_demux(char* data, int size, SrsFormat* format)函数需要实现。
整个录制的工作在srs_app_dvr源文件中实现,mp4文件的封装在srs_kernel_mp4源文件中实现,这部分参考srs3.0实现。
其它需要定制的还有写文件类SrsFileWriter中的函数virtual int lseek(off_t offset, int whence, off_t* seeked)。
代码见百度云盘(代码)目录下srs-2.0_dvr_mp4.zip文件。