FFmpeg,Nginx-rtmp-module搭建简易的流媒体服务器

FFmpeg,Nginx-rtmp-module搭建简易的流媒体服务器

说明:仅代表个人理解,肯定会有理解不准确的地方,劳烦指正,没有复制粘贴文档中的官方语言

一、FFmpeg的安装以及使用

1、FFmpeg简介

ffmpeg就是一款基于命令行操作的,处理视频的开源工具,比较轻量比较好用,主要功能有音视频分离,视频转码,视频切片,加滤镜等功能。官网地址:www.ffmpeg.org,由于外国的网站,下载可能比较慢,也是全英文的,所以推荐个中文文档 https://my.oschina.net/u/2367476/blog/904257

2、安装FFmpeg

安装ffmpeg还是比较简单的,除了下载速度很慢,关键是安装libx264等码库,这里的话,个人推荐不要用那个static版本,我用了一下,后来因为安装了libx264后还报错,也就没有深入研究了。

安装好ffmpeg后,将它的可执行文件ffmpeg和ffprobe添加到环境变量里,这样就可以全局执行了,比较方便

3、FFmpeg常用指令

#将其他视频格式,avi,flv等格式,转换为mp4

ffmpeg -i input.flv -acodec copy -vcodec libx264 output.mp4

可选参数:

-acodec 设置音频解码器,简写 -c:a

-vcodec 设置视频解码器,简写-c:v

-n 如果输出文件已存在,则直接退出,不转换

-f 强制指定输出格式

-movflags faststart   这个指令可以将MP4文件中的moov移动到文件的最前面,以便支持边下边播

#视频切片,应该是只支持MP4格式,所以需要先转换成MP4

ffmpeg -i https://liurq-pic.oss-cn-beijing.aliyuncs.com/test.mp4 -f segment -segment_time 2 -segment_format mpegts -segment_list /root/test/test.m3u8 -c copy -bsf:v h264_mp4toannexb -map 0 /root/test/test-%04d.ts

参数说明:

-i 输入文件,支持网络连接格式

-f  指定输出格式为segment

-segment_time  2  指定分片长度为2s

-segment_format  mpegts  覆盖内部容器格式,默认情况下它由文件名扩展名猜测

-segment_list  指定生成的索引文件的存放地址以及文件名

-bsf:v bsf表示binary  steam fiter ,v表示video

-map  这个比较复杂,参考博客https://blog.csdn.net/xiaoluer/article/details/81136478

path/filename.ts  代表生成的视频切片的保存路径,需要保证m3u8索引文件和ts文件在同一目录下

#视频推流

ffmpeg -re -i test.mp4 -vcodec copy -codec copy -f flv rtmp://192.168.8.129:1935/vod/test

-re  :限制推流速度为真实速度,就是1秒只推流1s的视频,从而达到直播的效果,不然一下推完,也不能算是直播

说明:这个推流可以搭配Nginx-rtmp,将test.mp4推流到nginx的rtmp模块,rtmp模块配置了直播流,可以接收rtmp协议的视频流,并自动保存为ts-m3u8的这种格式,相当于视频切片,但与视频切片不同的是,推流生成的m3u8文件没有结束符,导致在nginx中配置vod点播时,无法正常播放,原因也很剪刀,推流的方式是以直播的方式推流的,相当于视频并不会完结,所以并不会添加结束符#EXT-X-ENDLIST。

#处理MP4,将MP4的moov块移动到文件的最前方

ffmpeg -i input.mp4 -movflags faststart -acodec copy -vcodec copy output.mp4

扩展:MP4文件分为以下几个主要部分:moov存储视频的信息,当客户端读取到moov后,才可以播放视频,视频区,音频区,当moov位于视频区后面时,http就会多次请求,知道读取到moov后,才开始播放,这几次请求的响应码为206,代表断点续传,所以MP4本身就是支持边下边播的

二、Nginx-rtmp-module的安装和使用

1、简介

Nginx-rtmp-module是nginx的一个扩展模块,它提供了nginx对于rtmp协议的支持,如果没有nginx则需要在编译之前的时候通过配置指令添加模块,如果已有nginx则需要重新编译,并添加模块

,参考博客 https://www.cnblogs.com/zhangmingda/p/12638985.html

2、配置Nginx-rtmp

rtmp{
    server {
    
        #配置监听的端口
        listen 1935;
        #请求数据块的大小,一般4000足够
        chunk_size 4000;

        #点播服务器,访问该路径可以以rtmp协议拉流访问play中配置的目录中的视频文件
        application vod {
            #文件保存地址
            play /tmp/vods;
        }

        #直播回放服务器,配置了live on代表开启直播,hls  on代表支持直播回放
        application hls{
            live on; #开启直播
            #record all; #配置记录类型,可以配置音频,视频或全部
            #record_path /tmp/flvs; #记录的路径
            hls on; #这个参数把直播服务器改造成实时回放服务器。
            # wait_key on; #对视频切片进行保护,这样就不会产生马赛克了。
            
            # hls_fragment 2s;     #每个视频切片的时长。
            hls_playlist_length 24h;  #总共可以回看的事件,这里设置的是24小时,过期自动删除。
            # hls_continuous on; #连续模式。
            # hls_cleanup on;    #对多余的切片进行删除。
            # hls_nested on;     #嵌套模式,配置了此项后,保存的m3u8会被${hls_path}/${fileName}/index.m3u8替换
            hls_path /tmp/hls;
            # allow play  all;
        }
    }
}

配置了如上以后,就可以使用ffmpeg进行推流了。

配置支持http访问:在http的server下添加如下配置项

        location /hls {
            types{
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
            #以上配置项必加,如下是配置跨域请求,按需添加
            add_header 'Access-Control-Allow-Origin' '*';
        }

配置好后,用户可以通过http协议访问hls来播放视频

配置好如上两项后,你可以:

1、通过ffmpeg推流到rtmp://ip:1935/hls/test进行直播,然后通过VLC进行rtmp拉流观看直播

2、通过ffmpeg视频切片后将视频文件存放到hls_path/路径下,通过http://ip:80/hls/test.m3u8进行http协议的播放,本质上是观看直播回放,但形式类似于点播

3、通过rtmp协议拉流vod配置项中的路径下的视频文件,好像也可以配置http协议进行播放,感兴趣的可以试一下

三、如上就绪后,最终肯定要回归代码,java代码如何操作ffmpeg进行推流,切片请看下一篇文章

附:所需软件,里面ffmpeg有static静态版本,也有snapshot版本,按需取

链接:https://pan.baidu.com/s/11NPKcWoeFFjJ5lIvEhPP9A 
提取码:95f6 
复制这段内容后打开百度网盘手机App,操作更方便哦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx是一个高性能的开源Web服务器,同时也可以用作反向代理服务器、负载均衡器和流媒体服务器NginxRtmp-Module是一个第三方模块,它为Nginx服务器添加了RTMP(Real-Time Messaging Protocol)支持,使其可以充当一个流媒体服务器FFmpeg是一个跨平台的音视频处理工具,它可以用来进行多媒体文件的转码、编解码、录制和流媒体传输等操作。 引用中提到了使用Nginx Nginx-Rtmp-Module Ffmpeg搭建流媒体服务器的方法。具体配置可以查看conf/nginx.conf文件。首先需要解压文件,然后运行nginx_start.bat文件来启动Nginx服务器。这样就可以使用Nginx服务器提供的RTMP服务,通过FFmpeg推送一个RTMP流到Nginx,然后客户端可以通过访问Nginx来收看实时视频流。还可以使用HLS(HTTP Live Streaming)协议,通过HTTP协议来访问Nginx服务器并收看视频流,但是FFmpeg推送流仍然是RTMP的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器服务器](https://blog.csdn.net/sinat_16643223/article/details/115108327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ffmpeg+nginx+nginx-rtmp-module搭建个人直播平台](https://download.csdn.net/download/qq_29114677/13012815)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值