IPC出来的码流都是RTP码流,可能是裸的H264,也可能是PS流。如果要推流的话,有2种方案可以选择
1.直接解析出h264帧数据,然后封装成RTMP协议进行推流。
2.利用ffmpeg实现,ffmpeg拉流通过av_read_frame得到h264帧,然后将264帧封装成RTMP的tag进行推流。
前者实现有一定工作量,需要自己解析264,封装成RTMP包。该方案代码自研,可控可扩展,稳定有保障。而后者利用ffmpeg实现起来快,但IPC码流不规范,特别是PS流,各厂家并不一定严格按PS协议封装,可能加有自己的私有字段,以至于fmpeg处理兼容性有问题,造成代码风险不可控,除非对ffmpeg有非常熟练的驾驭能力,能进行二次开发,否则不建议使用ffmpeg来对PS流解封和封装,本文在此仅仅用ffmpeg推流来测试RTMP服务器,后续会正式方案会用上代码实现该功能。
对于RTMP服务器,业界商用的FMS,稳定可控不用多说,但需要付费。对于中小企业望而却步。好在开源方案有crtmpd,gstreammer,nginx-rtmp-moudle,srs等方案,前二者比较简单,适合在嵌入式场景使用,后二者适应高并发的服务器场景,而SRS采用协程模式,单进程支持9000路并发,nginx-rtmp单进程支持3000路,但支持多进程扩展,至于二者优劣很难评说。基于SRS文档资料比较齐全,上手容易,笔者选择SRS为选型方案。
SRS下载地址:https://github.com/ossrs/srs,编译和部署非常简单。进入trunk目录,编译命令ÿ