Linux搭建流媒体服务器
流媒体指以流方式在网络中传送音频、视频和多媒体文件的媒体形式。相对于下载后观看的网络播放形式而言,流媒体的典型特征是把连续的音频和视频信息压缩后放到网络服务器上,用户边下载边观看,而不必等待整个文件下载完毕。由于流媒体技术的优越性,该技术广泛应用于视频点播、视频会议、远程教育、远程医疗和在线直播系统中。作为新一代互联网应用的标志,流媒体技术在近几年得到了飞速的发展。
搭建RTSP流媒体服务器(Darwin Streaming Server)
注意:
上来首先关闭linux系统的防火墙以及selinux然后再进行下面的操作。使用命令service iptables stop
和setenforce 0
来关闭防火墙以及selinux。这里之所以选择关闭是为后面的测试做准备的。⚠仅限学习测试过程中使用,实际生产过程中是🈲不能这样的。
安装依赖组件
1 | yum -y install gcc gcc-c++ perl ld-linux.so.2 libstdc++.so.6 |
下载并安装Darwin Streaming Server
1 | wget http://dss.macosforge.org/downloads/DarwinStreamingSrvr5.5.5-Linux.tar.gz |
上述过程均在root用户权限下进行操作。安装的过程中会让你建立一个用户并且设置密码。
访问访问Darwin Streaming Server WEB界面
打开浏览器,在网址栏输入http://192.168.131.129:1220/
我这里的服务器IP地址为192.168.131.129,你需要替换成为你自己的服务器IP地址。
初始设置
1.*Setup Assistant MP3 Broadcast Password:这里重复输入你的密码,然后点Next下一步;
*2、Setup Assistant Secure Administration:不用勾选,直接点Next下一步;
3、Setup Assistant Media Folder:默认为/usr/local/movies,不建议修改,直接点Next下一步;
4、Setup Assistant Streaming on Port 80:不建议改端口,点Finish完成设置向导。
!
页面如图所示,可以对其进行一系列的操作和修改。
启动服务sudo /usr/local/sbin/DarwinStreamingServer
开启WEB服务器sudo /usr/local/sbin/streamingadminserver.pl
设置开机启动的话可以编辑/etc/rc.local
文件在exit 0之前加入如下内容。
1 | /usr/local/sbin/DarwinStreamingServer |
测试
这里使用的是VLC播放器▶,若没有安装的话可以通过下面命令来安装
1 | cd /etc/yum.repos.d/ |
打开vlc播放器点击上角的“媒体”然后点击打开网络串流然后输入网络地址URL,要想播放/usr/local/movies下的视频。那么输入的地址就是
1 | rtsp://192.168.131.128/sample_h264_1mbit.mp4 |
这里呢显示了绿屏,视频倒是可以播放。但是却看不到动画那么怎么解决呢❓
操作流程为:工具->首选项->视频->显示->输出->OpenGL GLX视频输出。如下所示:
如果想要播放其他的文件夹下的视频的话,在网页端修改Media Directory
下面我们来测试一下,换了文件夹视频能否正常播放呢❓经过测试依旧以可播放。
测试呢是直接把movies目录下的视频移动到media文件夹下,成功测试成功。但是使用media目录下原有的1.MP4媒体文件却报了如下错误。
结果呢出了上图所示的信息,换了目录后播放失败了😂。按道理是可以播放的呀但是为什么会这样呢❓
我的第一反应就是莫非是因为权限的缘故导致无法播放,第二反应则是文件必须得串流才能播放。
想法一
所以首先就分别查看两个文件夹下文件的权限这里发现1.MP4文件的属主和属组均为root,而其他的文件的属主和属组分别是qtss和root。所以我就选择修改1.MP4的权限来试着尝试能否正常播放。结果还是同样的问题😒,所以选择使用修改权限的方法是行不通的。
想法二
既然第一条路走不通那就选择走另外一条路好了🤣实在不行的话,用谷歌上肯定可以找到答案的。那么怎么串流呢主要步骤如下


点击下一个选择RSTP然后点击添加端口选择默认的8554,改成自己的也可。路径改为1.mp4.同时不选择本地显示以及激活转码。然后点击下一个这个页面不需要做操作,直接选择串流就🆗。


到此就貌似好像大概或许应该可能就大功告成了,屁话少说测试一下就知道了。
测试机为装有vlc播放器的windows 7,视频较短的话可以设置循环播放。因为很可能会有这种情况的发生,等你输完URL地址它就播放结束了,还是会提示之前的那种❌错误情况。测试和之前方法一样在这我输入的地址为rstp://192.168.131.129:8554/1.mp4
(⓿_⓿)到此终于大功告成
nginx+ffmpeg搭建流媒体服务器
前面介绍了如何使用Darwin Streaming Server搭建流媒体服务器,下面来介绍使用nginx+ffmpeg搭建流媒体服务器。
安装yasm
Yasm是一个完全重写的NASM汇编。目前,它支持x86和AMD64指令集。 接受NASM和GNU汇编器(gas)语法,产出二进制, ELF32 , ELF64 , COFF , Mach - O的( 32和64 ) , RDOFF2 ,的Win32和Win64对象的格式,并生成STABS 调试信息的来源,DWARF 2 ,CodeView 8格式。
下载yasm
1 | wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz |
解压和安装
1 | tar -zxvf yasm-1.3.0.tar.gz |
安装lame
用于mp3编码。由于专利版权问题,ffmpeg默认不带mp3格式编码器,但是有mp3格式解码器。
下载lame
1 | wget https://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz/download |
解压和安装
1 | mv download lame-3.99.5.tar.gz |
安装ffmpeg
下载ffmpeg
1 | wget http://www.ffmpeg.org/releases/ffmpeg-3.1.tar.gz |
解压和安装
1 | tar -zxvf ffmpeg-3.1.tar.gz |
安装完成后可以通过ffmpeg -version
查看安装的版本,可以通过ffmpeg -codecs |grep 媒体格式
来查看对媒体格式的支持情况。

安装nginx
安装依赖
1 | yum -y install gcc pcre-devel openssl openssl-devel |
下载nginx
1 | wget http://nginx.org/download/nginx-1.8.1.tar.gz |
解压和安装
1 | tar zxvf nginx-1.8.1.tar.gz |
启动nginx
1 | /usr/local/nginx/sbin/nginx |
可以在浏览器中输入http://localhost
来进行测试,看到welcome to nginx
则说明安装成功。默认端口为80端口可以通过vim /usr/local/nginx/conf/nginx.conf
命令来对nginx的配置文件进行修改。修改完成后重启即可生效
安装rtmp模块
官方github地址:https://github.com/arut/nginx-rtmp-module
,因此需要安装git。
1 | yum -y install git |
重新安装nginx并拓展nginx-rtmp-module模块
1 | ./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_ssl_module |
启动 nginx 的命令:
1 | $ sudo local sbin/nginx -s stop |
配置推流地址以及播放页面
使用vi /usr/local/nginx/conf/nginx.conf
命令来编辑nginx配置文件,主要修改的地方如下
1 | ##切换自动推送(多 worker 直播流)模式。默认为 off |
下面来解释一下里面各行代码的含义。对于视频直播服务,如果需要支持多路流输入的话,很简单,在 nginx 配置文件里多配几个 Application 就只可以了,像下面这样:
1 | application live { |
这样就可以通过下面的地址来推送直播流,其它观众端也可以通过下面的地址来访问直播流:
1 | rtmp://youserverIp/live/test |
后面紧跟的 test 关键字,可以随便更换,只要你的推送流和访问流的地址一样就可以了。
rtmp 模块也可以直接支持 VOD 这种视频点播服务 ,只需要在配置文件里添加如下内容即可:
1 | # video on demand |
然后把一个 mp4 或是 flv 文件移动到 /tmp/viedo目录下,对于 /tmp/viedo/hello/test.mp4 这个视频文件,就可以通过下面的网址来访问了:
1 | rmtp://youserverip/vod//hello/test.mp4 |
hls直播流配置
如果需要使用 HLS 来视频直播,可以直接像配置文件那样,写上下面这一段:
1 | application hls { |
然后在下面的http中加入如下信息
1 | #rtmp状态页面 |
配置好后若推流地址为rtmp://193.112.247.63/hls/hello
则播放地址如下
使用rtmp
1
rtmp://193.112.247.63/hls/hello
使用hls
1
http://193.112.247.63/hls/hello.m3u8
此链接是在ios以及mac系统的浏览器内可以直接正常播放直播流的。
使用ffmpeg推流直播
使用ffmpeg推流到nginx
使用rtmp协议推一个本地的mp4到上面配置的myapp上1
ffmpeg -re -i /tmp/live/test.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/live/test1"
流播放地址为:
rtmp://193.112.247.63:1935/live/test1
或者rtmp://6-07.club:1935/live/test1
使用hls协议推一个本地的mp4到hls上(apple公司开发的,可在iPad、safari的中进行播放)
1
ffmpeg -re -i /tmp/live/test.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/hls/test2"
流播放地址为:
http://193.112.247.63/hls/test2.m3u8
或者http://6-07.club/hls/test2.m3u8
上面也讲过hls协议推流同样可以使用rmtp协议来进行拉流。地址为
rtmp://193.112.247.63/hls/test2
或者rtmp://6-07.club/hls/test2
使用OBS推流
🚀这个是传送链接,主要有windows、Linux、macos三种版本,请根据自己的需求下载。
打开后点击左上角的文件–>设置–>串流。服务选择自定义,服务器选择输入自己的流媒体服务器地址。串流密钥可以随遍填。但是自己要记住,要不然等下播放时会出错。
播放地址为
rtmp://193.112.247.63/hls/obs
这里采用的是推送本地的媒体源,当然你自己也可以选择其他的。
使用obs比ffmpeg有诸多的好处,懂得自然都懂这里就不在详细的介绍OBS的强大之处了。
视频点播服务
具体怎么实现上面已经介绍过,视频点播服务可以使观众根据自己的爱好来观看视频。点播地址
rtmp://193.112.247.63/vod//hello/test.mp4
这里可以选择快进进行视频的观看,并且可以显示视频的长短。
未完待续 网页点播,网页直播。