搭建RTMP服务器

本文链接:https://www.jianshu.com/p/1cbff1431590

1. 购买云服务器

领取免费腾讯云服务器

申请成功后,会收到邮件。

2018-01-09 09-42-22屏幕截图.png

您新购买的云服务器(共1台)已分配成功(订单号:20180108126856),感谢您对腾讯云的支持!

服务器操作系统为 Ubuntu Server 16.04.1 LTS 64位 ,默认账户为 ubuntu ,初始密码为 9WHGBwKUSa3EHUSi

服务器名称 云主机ID 所在网络ID 内网IP 公网IP
u672au547du540d ins-qgchmd9i 基础网络 10.135.148.23 139.199.66.124

用终端登录
The authenticity of host '139.199.66.124 (139.199.66.124)' can't be established.
ECDSA key fingerprint is SHA256:P0XOcgjXyTikxaGKzmWsALKUYZPqTftP0KTFoTJnFvs.
Are you sure you want to continue connecting (yes/no)?


云主机控制台

2018-01-09 09-32-21屏幕截图.png

在控制台点登录或者在终端输入ssh 用户名@服务器IP地址登录到服务器

2018-01-08 09-50-59屏幕截图.png
2018-01-09 09-38-49屏幕截图.png

第一次用ssh连接会提示验证主机

2018-01-09 09-58-12屏幕截图.png

服务器查看自己的ECDSA key fingerprint

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
2018-01-08 10-01-28屏幕截图.png

参考链接

原来的密码太长,使用命令password更改密码为8*

2.设置无密码登录(可跳过次步骤)

复制本机的~/.ssh/id_rsa.pub,到云主机控制台创建密钥,密钥名称可以随便输入,公钥就是刚刚复制的内容

2018-01-08 14-11-14屏幕截图.png

创建完成后,加载密钥

2018-01-09 09-12-51屏幕截图.png
2018-01-08 14-22-11屏幕截图.png
2018-01-08 14-22-30屏幕截图.png

重启云服务器,现在可以无密码登录了

2018-01-08 14-23-09屏幕截图.png

3.搭建nginx服务器

参考博客

开发环境

Ubuntu 16.04 server

nginx-1.8.1

nginx-rtmp-module

nginx的服务器的搭建

下载nginx

mkdir ~/code
cd ~/code
wget http://nginx.org/download/nginx-1.8.1.tar.gz

解压

tar -zxf nginx-1.8.1.tar.gz -C ~/code/

下载nginx-rtmp-module

git clone https://github.com/arut/nginx-rtmp-module.git
2018-01-08 10-37-37屏幕截图.png

安装nginx的依赖库

sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install openssl libssl-dev

配置并编译nginx

使用nginx的默认配置,添加nginx的rtmp模块。

2018-01-08 10-40-47屏幕截图.png
cd ~/code/nginx-1.8.1/
./configure --add-module=../nginx-rtmp-module
make
sudo make install

运行测试nginx

进入安装目录

cd /usr/local/nginx

运行命令

sudo ./sbin/nginx

注意:以后所有的命令都在/usr/local/nginx目录运行,也是nginx配置文件的相对目录。

打开浏览器在地址栏输入:139.199.66.124。如果,如下图显示那样就证明您的nginx服务器搭建成功了。

2018-01-08 10-19-04屏幕截图.png

4.点播视频服务器的配置

通过上一步nginx服务器已经搭建完成,然后我们就可以开启一个视频点播的服务了。打开配置文件nginx.conf,添加RTMP的配置。

worker_processes  1;

events {
    worker_connections  1024;
}

rtmp {                #RTMP service
    server {
        listen 1935;  #port
        chunk_size 4096;   #data size

        application vod {
            play /home/ubuntu/Videos; #video path
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    sendfile        on;
    
    keepalive_timeout  65;
    
    server {
        listen       80;
        server_name  localhost;
        
        location / {
            root   html;
            index  index.html index.htm;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        
    }

}

发送测试用的视频文件到服务器

rong@rong-ubuntu-07:~/Videos$ scp testfile.mp4 ubuntu@139.199.66.124:/home/ubuntu/Videos
ubuntu@139.199.66.124's password: 
testfile.mp4                                  100%  908KB 908.4KB/s   00:00
2018-01-08 11-08-03屏幕截图.png

文件放好之后,那就让我们重新启动一下nginx

sudo ./sbin/nginx -s reload

打开视频播放软件选用的是VLC media-> open network stream….
如图填写我们要点播的节目地址rtmp://139.199.66.124/vod/testfile.mp4 如图:

2018-01-08 11-11-30屏幕截图.png
2018-01-08 11-11-17屏幕截图.png

点击play就可以播放了。
当然点播不使用RTMP插件nginx自身也是可以实现点播服务的。那就是配置location部分,由于下面我们要配置直播和回看功能所以选用了RTMP服务。

5.直播视频服务器的配置

接着我们就在点播服务器配置文件的基础之上添加直播服务器的配置。一共2个位置,第一处就是给RTMP服务添加一个application这个名字可以任意起,也可以起多个名字,由于是直播我就叫做它live吧,如果打算弄多个频道的直播就可以live_cctv1、live_cctv2名字任意。第二处就是添加两个location字段,字段的内容请直接看文件吧。

worker_processes  1;

events {
    worker_connections  1024;
}

rtmp {                #RTMP service
    server {
        listen 1935;  #port
        chunk_size 4096;   #data size

        application vod {
            play /home/ubuntu/Videos; #video path
        }

        application live{ #first live field
            live on;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location /stat {     #first location field
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl { #second location field
            root /home/ubuntu/code/nginx-rtmp-module/;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        
    }

}

添加完这两处之后,重新启动nginx打开浏览器看看,是否有如下图显示:

2018-01-08 11-29-26屏幕截图.png

有没有看到live字样呢?如果可以显示出来,证明你的配置生效了。试一下推流到“rtmp://139.199.66.124/live/test

Screenshot_20180108-113609.png
2018-01-08 11-35-56屏幕截图.png

播放的地址就是“rtmp://139.199.66.124/live/test”,如果您本地有支持rtmp协议的播放器就可以试试了。

2018-01-08 11-36-37屏幕截图.png
2018-01-08 11-36-59屏幕截图.png

6.实时回看视频服务器的配置

我们想一想如果直播服务能够把节目录制在本地,我们不就可以直接进行回看先前的节目了吗?回看一分钟、一小时甚至一天的。想想就兴奋不用写代码有现成的可以使用。怎么用呢?继续看nginx的配置吧。

worker_processes  1;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application vod {
            play /home/ubuntu/Videos;
        }

        application live{
            live on;
            hls on;    #这个参数把直播服务器改造成实时回放服务器。
            wait_key on;  #对视频切片进行保护,这样就不会产生马赛克了。
            hls_path /home/ubuntu/Videos/hls;  #切片视频文件存放位置。
            hls_fragment 10s;     #每个视频切片的时长。
            hls_playlist_length 60s;  #总共可以回看的事件,这里设置的是1分钟。
            hls_continuous on; #连续模式。
            hls_cleanup on;    #对多余的切片进行删除。
            hls_nested on;     #嵌套模式。
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /home/ubuntu/code/nginx-rtmp-module/;
        }
        
        location /live {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            alias /home/ubuntu/Videos/hls;
            expires -1;
            add_header Cache-Control no-cache;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        
    }

}

1.添加完成后需要重新启动nginx,由于这次nginx需要向服务器写切片视频文件,但nginx我又没有给nginx指定用户名只能走默认的nobody用户和nogroup用户组,其实就是没有组。所以我对需要写入的目录做了增大权限的修改。
如下图,这样做就是为了避免由于权限问题而无法写文件。

2018-01-08 15-06-18屏幕截图.png

2.如何给服务器录制视频,在上一节已经说过,这里就不再说了。

3.查看视频文件是否真的录制上没有,继续看图:

2018-01-08 15-08-08屏幕截图.png

已经产生切片视频文件了。其中还有一个index.m3u8。

4.播放视频,这次可是http开头的了,“http://139.199.66.124/live/test/index.m3u8”。
5.已经可以播放了,如何回看呢?其实这个index.m3u8文件仅仅是目录。想回看那个就播放那个.ts文件就可以了。

7.录制flv视频服务器的配置

worker_processes  1;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application vod {
            play /home/ubuntu/Videos;
        }

        application live{
            live on;
            hls on;
            wait_key on;
            hls_path /home/ubuntu/Videos/hls;
            hls_fragment 10s;
            hls_playlist_length 60s;
            hls_continuous on;
            hls_cleanup on;
            hls_nested on;
            
            record all;    #record flv
            record_path /home/ubuntu/Videos/hls;
            record_suffix -%d-%b-%y-%T.flv;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /home/ubuntu/code/nginx-rtmp-module/;
        }
        
        location /live {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            alias /home/ubuntu/Videos/hls;
            expires -1;
            add_header Cache-Control no-cache;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        
    }

}

查看是否保存flv文件

2018-01-08 20-47-36屏幕截图.png

把文件复制到本地

scp ubuntu@139.199.66.124:/home/ubuntu/Videos/hls/test-08-Jan-18-20:35:40.flv ~/temp
2018-01-09 11-28-42屏幕截图.png

播放

2018-01-09 11-30-20屏幕截图.png

到此结束。

附上一些报错

重启服务器后报错

ubuntu@VM-148-23-ubuntu:/usr/local/nginx$ sudo ./sbin/nginx -s reload
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
ubuntu@VM-148-23-ubuntu:/usr/local/nginx$ sudo ./sbin/nginx 
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

解:
因为我装了两个nginx,要卸载掉自动安装的

sudo apt-get purge nginx
sudo apt-get autoremove

保存的ts和m3u8文件会自动删除

解:因为设置了这个hls_playlist_length 60s; #总共可以回看的事件,这里设置的是1分钟。

无法生成flv文件

查看error.log

2018/01/08 20:13:45 [crit] 31443#0: *25 record:  failed to open file '/home/rong/temp/test-08-Jan-18-20:13:45.flv' (13: Permission denied), client: 192.168.3.7, server: 0.0.0.0:1935

解:修改目录权限为777.

2018-01-08 15-06-18屏幕截图.png

参考
https://github.com/arut/nginx-rtmp-module/issues/332
https://github.com/arut/nginx-rtmp-module/wiki/Directives#record

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容