关于nginx流媒体服务器部署的文章已经有很多了,今天我这里讲一下如何在向服务器推流的同时将流转码为MP4文件保存下来,这里主要使用的是ffmpeg。
1、首先需要说明的是,不能用exec命令。他会在客户端推流结束的同时自动终止调用的外部程序,结果就是最后ffmpeg无法进行完整的编码。该命令只适合将接到的流转推到其他地址。
2、应该使用exec_record_done配合record命令使用。即在录制结束之后自动对已录制的文件进行转码操作得到MP4文件。根据是否使用record_interval命令又有两种不同的情况。
2A、若不使用record_interval,则会在推流停止后(即record完全停止后)才进行转码,在这之前得不到任何输出
2B、若使用record_interval,即可设置每隔一段时间就重新开始录制,结合record_append on命令,可确保最后录制的视频都在一个文件中,否则就会给每段录制都生成一个单独的文件。使用这两个命令之后,转码也会相应地每隔一段时间就进行一次,但最后都输出(覆盖)到同一个文件中。优点是能近乎“实时”地进行转码,缺点是会重复调用ffmpeg,占用系统资源。
3、需要注意的是,以上两种方法最后得到的转码文件(的时长)是相同的。
4、nginx.conf配置示例
application hls {
live on;
hls on;
record all;
record_path /home/zhanghui/test;
#record_in
本文介绍如何在nginx服务器上实现多媒体流的录制,并利用ffmpeg在推流结束后进行转码为MP4。重点讲解了不能使用exec命令的原因,推荐使用exec_record_done与record命令配合,讨论了是否使用record_interval的两种情况及其优缺点。通过示例配置展示了实际操作过程。
订阅专栏 解锁全文
1903

被折叠的 条评论
为什么被折叠?



