我是靠谱客的博主 矮小海燕,最近开发中收集的这篇文章主要介绍FFmpeg,Nginx-rtmp-module搭建简易的流媒体服务器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,操作更方便哦

最后

以上就是矮小海燕为你收集整理的FFmpeg,Nginx-rtmp-module搭建简易的流媒体服务器FFmpeg,Nginx-rtmp-module搭建简易的流媒体服务器的全部内容,希望文章能够帮你解决FFmpeg,Nginx-rtmp-module搭建简易的流媒体服务器FFmpeg,Nginx-rtmp-module搭建简易的流媒体服务器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部