1、介绍

nginx-http-flv-module是在nginx-rtmp-module基础上开发的一个直播模块。
感谢Arut创造了nginx-rtmp-module,它是Nginx的一个优秀的第三方模块,可以用来直播,支持RTMP,HLS和DASH方式直播,还支持调用第三方软件进行转码,录制视频等功能,由于依托Nginx,性能也比较高。但是美中不足的地方也不少,例如首屏时间长,不支持HTTP-FLV方式直播,不支持虚拟主机(vhost)功能,省略listen配置无法接受连接,有很多很明显的bug等问题。
nginx-http-flv-module解决了上述的问题。当然,还有些bug还有待修复。具体使用方法请参考说明文件:

为什么选择Nginx作为支持HTTP-FLV方式直播的服务器呢?因为Nginx的Web服务器功能对HTTP协议的支持非常完善,Nginx的性能优秀,经过了很多场景的检验。另外,Nginx本身对第三方软件的依赖较少,非常易于部署。这些都使得它成为HTTP-FLV方式直播服务器不可多得的选择。

1.1 nginx-http-flv-module的功能

  • 兼容nginx-rtmp-module所有功能,基于nginx-rtmp-module的流媒体服务器。
  • 支持HTTP-FLV方式的直播
  • 支持GOP缓存,以减少首屏时间
  • 支持虚拟主机功能
  • 可以省略listen配置项而不影响基本功能
  • 修复nginx-rtmp-module已知的bug

1.2 nginx-http-flv-module 安装配置

Github:nginx-http-flv-module

https://github.com/winshining/nginx-http-flv-module

查看英文介绍文档 :English README。

1.3 功能介绍

  • nginx-rtmp-module提供的所有功能。

  • nginx-http-flv-module的其他功能与nginx-rtmp-module的对比:

功能 nginx-http-flv-module nginx-rtmp-module 备注
HTTP-FLV (播放) x 支持HTTPS-FLV和chunked回复
GOP缓存 x
虚拟主机 x
省略listen配置 见备注 配置中必须有一个listen
纯音频支持 见备注 wait_videowait_key开启后无法工作
定时打印访问记录 x
JSON风格的stat x
  • NGINX的版本应该大于1.2.6,与其他版本的兼容性未知。
  • Linux(推荐)/FreeBSD/MacOS/Windows(受限)
  • 支持的播放器 VLC (RTMP & HTTP-FLV)/OBS (RTMP & HTTP-FLV)/JW Player (RTMP)/flv.js (HTTP-FLV).
  • flv.js只能运行在支持Media Source Extensions的浏览器上

1.4依赖环境

  • 在类Unix系统上,需要GNU make,用于调用编译器来编译软件。

  • 在类Unix系统上,需要GCC。或者在Windows上,需要MSVC,用于编译软件。

  • 在类Unix系统上,需要GDB,用于调试软件(可选)。

  • FFmpeg或者OBS,用于发布媒体流。

  • VLC(推荐)或者flv.js(推荐),用于播放媒体流。

  • 如果NGINX要支持正则表达式,需要PCRE库。

  • 如果NGINX要支持加密访问,需要OpenSSL库。

  • 如果NGINX要支持压缩,需要zlib库。

2 安装

2.1 RHEL/CentOS 6, 7

在这些操作系统上,最新发布且适配最新稳定版NGINX的模块可以通过以下方式获取:

yum install https://extras.getpagespeed.com/release-el$(rpm -E %{rhel})-latest.rpm
yum install nginx-module-flv

2.2 RHEL 8

dnf install https://extras.getpagespeed.com/release-el$(rpm -E %{rhel})-latest.rpm
sudo dnf --disablerepo=rhel-8-for-x86_64-appstream-rpms install nginx-module-flv

安装完毕后,HTTP-FLV功能的配置文件http-flv.conf和RTMP功能的配置文件rtmp.conf会被放在/etc/nginx/http-flv目录下,通过include手工将它们添加到/etc/nginx/nginx.conf,以开启HTTP-FLV和RTMP功能:

    http {...include /etc/nginx/http-flv/http-flv.conf;}include /etc/nginx/http-flv/rtmp.conf;

添加以下配置到/etc/nginx/nginx.conf,启动或者重启NGINX来启用本模块:

load_module modules/ngx_http_flv_live_module.so;

2.3 注意

上述的配置必须位于events配置项之前,否则NGINX不能启动。

更新可以通过yum update来完成。关于其他NGINX模块的详情见GetPageSpeed。

对于其他操作系统,见下面源码编译安装的说明。

3 源码编译安装

3.1 注意

nginx-http-flv-module包含了nginx-rtmp-module所有的功能,所以不要将nginx-http-flv-module和nginx-rtmp-module一起编译。

3.2 在Windows上

编译步骤请参考Building nginx on the Win32 platform with Visual C,不要忘了在Run configure script步骤中添加--add-module=/path/to/nginx-http-flv-module

3.3 在类Linux系统上

下载NGINX和nginx-http-flv-module。

将它们解压到某一路径 /path/to/nginx-http-flv-module。

打开NGINX的源代码路径(/usr/local/nginx )并执行:

将模块编译进NGINX,要到/usr/local/nginx
./configure --add-module=/path/to/nginx-http-flv-modulemakemake install

或者

将模块编译为动态模块
    ./configure --add-dynamic-module=/path/to/nginx-http-flv-modulemakemake install

操作日志

[root@ip104 tengine-2.3.2]# ./configure --add-dynamic-module=/path/to/nginx-http-flv-module
checking for OS+ Linux 3.10.0-957.21.3.el7.x86_64 x86_64
checking for C compiler ... foundnginx binary file: "/usr/local/nginx/sbin/nginx"nginx modules path: "/usr/local/nginx/modules"nginx configuration prefix: "/usr/local/nginx/conf"nginx configuration file: "/usr/local/nginx/conf/nginx.conf"nginx pid file: "/usr/local/nginx/logs/nginx.pid"nginx error log file: "/usr/local/nginx/logs/error.log"nginx http access log file: "/usr/local/nginx/logs/access.log"nginx http client request body temporary files: "client_body_temp"nginx http proxy temporary files: "proxy_temp"nginx http fastcgi temporary files: "fastcgi_temp"nginx http uwsgi temporary files: "uwsgi_temp"nginx http scgi temporary files: "scgi_temp"[root@ip104 tengine-2.3.2]#

4 使用方法

关于nginx-rtmp-module用法的详情,请参考README.md。

4.1 发布 推流服务

为了简单起见,不用转码:

ffmpeg -re -i MEDIA_FILE_NAME -c copy -f flv rtmp://example.com[:port]/appname/streamname

4.2 注意

  • 一些旧版本的FFmpeg不支持选项-c copy,可以使用选项-vcodec copy -acodec copy替代。

  • appname用于匹配rtmp配置块中的application块(更多详情见下文)。

  • streamname可以随意指定,但是不能省略。

  • RTMP默认端口1935,如果要使用其他端口,必须指定:port

4.3 播放

HTTP-FLV方式

http://example.com[:port]/dir?[port=xxx&]app=appname&stream=streamname

4.4 注意

  • 如果使用ffplay命令行方式播放流,那么必须为上述的url加上引号,否则url中的参数会被丢弃(有些不太智能的shell会把"&"解释为"后台运行")。

  • 如果使用flv.js播放流,那么请保证发布的流被正确编码,因为flv.js只支持H.264编码的视频和AAC/MP3编码的音频

  • 参数dir用于匹配http配置块中的location块(更多详情见下文)。

  • HTTP默认端口80, 如果使用了其他端口,必须指定:port

  • RTMP默认端口1935,如果使用了其他端口,必须指定port=xxx

  • 参数app的值(appname)用来匹配application块,但是如果请求的app出现在多个server块中,并且这些server块有相同的地址和端口配置,那么还需要用匹配主机名的server_name配置项来区分请求的是哪个application块,否则,将匹配第一个application块。

  • 参数stream的值(streamname)用来匹配发布的流的名称。

例子

假设在http配置块中的listen配置项是:

http {...server {listen 8080; #不是默认的80端口...location /live {flv_live on;}}
}

rtmp配置块中的listen配置项是:

rtmp {...server {listen 1985; #不是默认的1935端口...application myapp {live on;}}
}

并且发布的流的名称是mystream,那么基于HTTP的播放url是:

http://example.com:8080/live?port=1985&app=myapp&stream=mystream

注意

由于一些播放器不支持HTTP块传输, 这种情况下最好在指定了flv_live on;的location中指定chunked_transfer_encoding off,否则播放会失败。

RTMP方式

rtmp://example.com[:port]/appname/streamname

HLS方式

http://example.com[:port]/dir/streamname.m3u8

DASH方式

http://example.com[:port]/dir/streamname.mpd

示例图片

RTMP (JW Player) & HTTP-FLV (VLC)

HTTP-FLV (flv.js)

nginx.conf实例

注意

配置项rtmp_auto_pushrtmp_auto_push_reconnectrtmp_socket_dir在Windows上不起作用,除了Windows 10 17063以及后续版本之外,因为多进程模式的relay需要Unix domain socket的支持,详情请参考Unix domain socket on Windows 10。

最好将配置项worker_processes设置为1,因为在多进程模式下,ngx_rtmp_stat_module可能不会从指定的worker进程获取统计数据,因为HTTP请求是被随机分配给worker进程的。ngx_rtmp_control_module也有同样的问题。这个问题可以通过这个补丁per-worker-listener优化。

另外,vhost功能在多进程模式下还不能完全正确运行,等待修复。例如,不管向哪个域名推流,下面的配置在多进程模式下是没有问题的:

rtmp {...server {listen 1935;server_name 1st_domain_name;application myapp {...}}server {listen 1935;server_name 2nd_domain_name;application myapp {...}}
}

而使用下面的配置,当publisher在端口1945上发布媒体流,播放请求在此端口上访问非publisher的worker进程时是有问题的:

rtmp {...server {listen 1935;server_name 1st_domain_name;application myapp {...}}server {listen 1945;server_name 2nd_domain_name;application myapp {...}}
}

配置实例

worker_processes  1; #运行在Windows上时,设置为1,因为Windows不支持Unix domain socket
#worker_processes  auto; #1.3.8和1.2.5以及之后的版本#worker_cpu_affinity  0001 0010 0100 1000; #只能用于FreeBSD和Linux
#worker_cpu_affinity  auto; #1.9.10以及之后的版本error_log logs/error.log error;#如果此模块被编译为动态模块并且要使用与RTMP相关的功
#能时,必须指定下面的配置项并且它必须位于events配置
#项之前,否则NGINX启动时不会加载此模块或者加载失败#load_module modules/ngx_http_flv_live_module.so;events {worker_connections  4096;
}http {include       mime.types;default_type  application/octet-stream;keepalive_timeout  65;server {listen       80;location / {root   /var/www;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location /live {flv_live on; #打开HTTP播放FLV直播流功能chunked_transfer_encoding on; #支持'Transfer-Encoding: chunked'方式回复add_header 'Access-Control-Allow-Origin' '*'; #添加额外的HTTP头add_header 'Access-Control-Allow-Credentials' 'true'; #添加额外的HTTP头}location /hls {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}root /tmp;add_header 'Cache-Control' 'no-cache';}location /dash {root /tmp;add_header 'Cache-Control' 'no-cache';}location /stat {#push和pull状态的配置rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {root /var/www/rtmp; #指定stat.xsl的位置}#如果需要JSON风格的stat, 不用指定stat.xsl#但是需要指定一个新的配置项rtmp_stat_format#location /stat {#    rtmp_stat all;#    rtmp_stat_format json;#}location /control {rtmp_control all; #rtmp控制模块的配置}}
}rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;rtmp {out_queue           4096;out_cork            8;max_streams         128;timeout             15s;drop_idle_publisher 15s;log_interval 5s; #log模块在access.log中记录日志的间隔时间,对调试非常有用log_size     1m; #log模块用来记录日志的缓冲区大小server {listen 1935;server_name www.test.*; #用于虚拟主机名后缀通配application myapp {live on;gop_cache on; #打开GOP缓存,减少首屏等待时间}application hls {live on;hls on;hls_path /tmp/hls;}application dash {live on;dash on;dash_path /tmp/dash;}}server {listen 1935;server_name *.test.com; #用于虚拟主机名前缀通配application myapp {live on;gop_cache on; #打开GOP缓存,减少首屏等待时间}}server {listen 1935;server_name www.test.com; #用于虚拟主机名完全匹配application myapp {live on;gop_cache on; #打开GOP缓存,减少首屏等待时间}}
}
events {worker_connections  1024; #Nginx处理的最大连接数
}http {include       mime.types;default_type  application/octet-stream;keepalive_timeout  65;server {listen       80; #Nginx监听的HTTP请求端口location / {root   /var/www; #HTTP请求URL映射到服务器的位置index  index.html index.htm; #HTTP请求优先请求的文件,如http://localhost/,如果有index.html在/var/www目录下,那么请求的是/var/www/index.html}error_page   500 502 503 504  /50x.html; #如果遇到这些HTTP请求错误,Nginx返回50x.html的内容location = /50x.html {root   html; #因为/配置了root /var/www,所以这儿html对应的是/var/www/html,所以50x.html的路径是/var/www/html/50x.html}location /live {flv_live on; #当HTTP请求以/live结尾,匹配这儿,这个选项表示开启了flv直播播放功能chunked  on; #HTTP协议开启Transfer-Encoding: chunked;方式回复,已废弃,使用标准的chunked_tranfer_encoding代替}}
}rtmp_auto_push on; #因为Nginx可能开启多个子进程,这个选项表示推流时,媒体流会发布到多个子进程
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp; #多个子进程情况下,推流时,最开始只有一个子进程在竞争中接收到数据,然后它再relay给其他子进程,他们之间通过unix domain socket传输数据,这个选项表示unix domain socket的路径rtmp {out_queue   4096;out_cork    8;max_streams 64; #Nginx能接受的最大的推流数server {listen 1935; #Nginx监听的RTMP推流/拉流端口,可以省略,默认监听1935application myapp {live on; #当推流时,RTMP路径中的APP(RTMP中一个概念)匹配myapp时,开启直播gop_cache on; #开启GOP(Group of Picture)缓存,播放器解码时,收到一个完整的GOP才会开始播放,这个是减少播放延迟的选项pull rtmp://live.hkstv.hk.lxdns.com/live/hks; #如果懒得推流,那可以用这个,香港卫视的直播推流}#以下配置项已废弃application app1 {proxy_pass rtmp://host(ip or domain name)[:host]/app2; #将推流反向代理到上游服务器,并将app1自动转化为app2#proxy_pass rtmp://backend; #将推流反向代理到上游服务器,见upstream配置}}server {listen 1935;server_name *.test.com; #或者www.test.*/www.test.comapplication myapp {live on;gop_cache on;}}#以下配置项已废弃,原因在下文更新中upstream backend {#开启负载均衡server host1:port1;server host2:port2;}
}

基本配置完成了,一下是我自己的配置文件

#aaa
#工作进程
worker_processes  2;
#worker_processes  auto; #1.3.8和1.2.5以及之后的版本#worker_cpu_affinity  0001 0010 0100 1000; #只能用于FreeBSD和Linux
#worker_cpu_affinity  auto; #1.9.10以及之后的版本#日志功能
error_log logs/error.log error;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#error_log  "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";#pid        logs/nginx.pid;
#如果此模块被编译为动态模块并且要使用与RTMP相关的功
#能时,必须指定下面的配置项并且它必须位于events配置
#项之前,否则NGINX启动时不会加载此模块或者加载失败#load_module modules/ngx_http_flv_live_module.so;#事件配置
events {worker_connections  1024;
}# load modules compiled as Dynamic Shared Object (DSO)
#
#dso {
#    load ngx_http_fastcgi_module.so;
#    load ngx_http_rewrite_module.so;
#}
#RTMP配置rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;rtmp {out_queue           4096;out_cork            8;max_streams         128;timeout             15s;drop_idle_publisher 15s;log_interval 5s; #log模块在access.log中记录日志的间隔时间,对调试非常有用log_size     1m; #log模块用来记录日志的缓冲区大小# 用于是直播的服务 1935端口 推送地址:rtmp://39xxxxxxx.120:1935/hls  获取地址:http://live.xxxxxxxx.com/hls/222.m3u8server {listen 1935;server_name live.xxxxx.com;#server_name 1935.xxxxxx.com; #用于虚拟主机名后缀通配#chunk_size 4000; #快大小#电视模式application mytv {          live on;   #enable live streaming#record first 1K of streamrecord all;record_path /tmp/av;record_max_size 1K;#append current timestamp to each flvrecord_unique on;#publish only from localhostallow publish 127.0.0.1;deny publish all;#allow play all;}application myapp {live on;gop_cache on; #打开GOP缓存,减少首屏等待时间}#hls配置application hls {live on;hls on;hls_path /tmp/hls;}application dash {live on;dash on;dash_path /tmp/dash;}}#可以多个server的 }  # HTTP 相关网络请求配置
http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;#access_log  "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G"  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;# 用于,net core 相关网站的服务    server {listen       80;server_name www.xxxxxxxx.com#server_name   xxxxxx.com  *.xxxxxxx.com;#charset koi8-r;#access_log  logs/host.access.log  main;#access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;location / {root   html;index  index.html index.htm;#proxy_pass         http://localhost:5000;#proxy_http_version 1.1;#proxy_set_header   Upgrade $http_upgrade;#proxy_set_header   Connection keep-alive;#proxy_set_header   Host $host;# proxy_cache_bypass $http_upgrade;#proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;#proxy_set_header   X-Forwarded-Proto $scheme;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}#用于视频直播服务先关的http 解析服务 add 2019-7-8server {listen      80;server_name live.xxxxxxxxxx.com;location / {#index  /stat;proxy_pass         http://localhost:1936;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location /live {flv_live on; #打开HTTP播放FLV直播流功能chunked_transfer_encoding on; #支持'Transfer-Encoding: chunked'方式回复add_header 'Access-Control-Allow-Origin' '*'; #添加额外的HTTP头add_header 'Access-Control-Allow-Credentials' 'true'; #添加额外的HTTP头}location /hls {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}root /tmp;add_header 'Cache-Control' 'no-cache';}location /dash {root /tmp;add_header 'Cache-Control' 'no-cache';}location /stat {#push和pull状态的配置rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {root /usr/local/nginx-http-flv-module; #指定stat.xsl的位置}#如果需要JSON风格的stat, 不用指定stat.xsl#但是需要指定一个新的配置项rtmp_stat_format#location /stat {#    rtmp_stat all;#    rtmp_stat_format json;#}location /control {rtmp_control all; #rtmp控制模块的配置}}#测试服务器使用server {listen       80;server_name  8056.xxxxxxxxxxx.com;#server_name   1123.xxxxxxxx.com;#charset koi8-r;#access_log  logs/host.access.log  main;#access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;location / {root   html;index  404.html 404.htm;proxy_pass         http://localhost:8056;#proxy_http_version 1.1;#proxy_set_header   Upgrade $http_upgrade;#proxy_set_header   Connection keep-alive;#proxy_set_header   Host $host;# proxy_cache_bypass $http_upgrade;#proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;#proxy_set_header   X-Forwarded-Proto $scheme;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}     }

转载于:https://www.cnblogs.com/sopcce/p/11621162.html

2019-2、CentOS7_直播服务搭建_nginx_nginx-http-flv-module相关推荐

  1. JavaCV音视频开发宝典:无需流媒体服务也无需转码,使用JavaCV和springBoot实现http-flv转封装直播服务,浏览器网页flv.js直接播放rtp、rtsp、rtmp实时视频

    <JavaCV音视频开发宝典>专栏目录导航 <JavaCV音视频开发宝典>专栏介绍和目录 前言 本章代码除了在<JavaCV音视频开发宝典:使用JavaCV和spring ...

  2. EasyNVS摄像机公网全终端无插件网页摄像机直播管理服务之网页无插件直播服务搭建流程

    背景分析 随着互联网基础设施建设的不断完善和发展,带宽的不断提速,尤其是光纤入户.4G/5G/NB-IoT各种网络技术的大规模商用,视频随时随地可看.可控.可视频会议调度指挥.可智能预警.可智能检索回 ...

  3. 在Ubuntu 12.04 64bit上搭建Crtmpserver视频直播服务

    本篇博客继续在上篇<在Ubuntu 12.04 64bit上搭建Crtmpserver视频点播服务> http://blog.csdn.net/tao_627/article/detail ...

  4. 服务器搭建和使用 ubuntu_Ubuntu中使用Nginx+rtmp搭建流媒体直播服务

    一.背景 本篇文章是继上一篇文章<Ubuntu中使用Nginx+rtmp模块搭建流媒体视频点播服务>文章而写,在上一篇文章中我们搭建了一个点播服务器,在此基础上我们再搭建一个直播服务器, ...

  5. 直播软件搭建直播服务架构

    直播软件搭建直播服务架构 前言 随着移动设备的普及和4G网络建设的全面铺开,短视频和直播行业日益火爆,其代表应用抖音.头条更是火遍大江南北,逐渐成为家喻户晓的国民APP.各大厂商也纷纷入局短视频赛道, ...

  6. 基于微服务架构的直播平台搭建【一】

    一.摘要 自"十四五"计划提出以来,国家将"互联网+教育"列为工作重点.再结合后疫情时代的大发展背景,人们的需求已经从简单的"拥有一个线上平台&quo ...

  7. 快速搭建自己的直播服务器,完成属于你的直播服务。(以windows 下虚拟机centos为例,对安装步骤进行详细说明)

    本文以srs v2.0-r8  安装为例,对搭建直播服务器的搭建和安装过程中的注意事项,进行详细的说明. 点击跳转到 教程原文 1.Windows下安装linux centos系统,版本建议 5.7- ...

  8. linux 虚拟机直播网站,快速搭建自己的直播服务器,完成属于你的直播服务。(以windows 下虚拟机centos为例,对安装步骤进行详细说明)...

    本文以srs v2.0-r8  安装为例,对搭建直播服务器的搭建和安装过程中的注意事项,进行详细的说明. 点击跳转到 教程原文 1.Windows下安装linux centos系统,版本建议 5.7- ...

  9. CentOS下直播和点播服务搭建

    转载自:CentOS下直播和点播服务搭建 一.准备环境 1.下载wget.lrzsz工具 yum install -y wget yum install -y lrzsz 2.备份系统原来的repo文 ...

最新文章

  1. BZOJ4568: [Scoi2016]幸运数字(线性基 倍增)
  2. ORU-10027: buffer overflow, limit of 10000 bytes
  3. 团队编程项目作业5-小组评分
  4. 每日一皮:程序员的生存状态 ...
  5. 利用 FC OSS 快速搭建 Serverless 实时按需图像处理服务
  6. centos7 转换为lvm_[转] centos7 调整XFS格式的LVM大小
  7. JavaScript调用ATL COM(二)
  8. 订单同步工程标准化改造事记
  9. python机器学习应用mooc_(2)Naive bayes
  10. 社交APP软件开发流程解析
  11. java war包是什么_War包是什么??
  12. 原生js实现动态生成表格
  13. 密码学写作论文排版操作手册,latex模板cryptocode
  14. 服务器外链图片不显示,nginx服务器设置图片防盗链,禁止图片外链
  15. english_搭配
  16. 【Swift 60秒】33 - Exiting multiple loops
  17. git使用进阶(一)
  18. 一比二购增加您指定商品降价时,给您发送邮件通知的功能
  19. Digilent FPGA开发板的Boards file的添加——以Eclypse-Z7为例
  20. Android 自定义带Logo的二维码图标

热门文章

  1. hyper运算符_25个特殊操作符(special operator)
  2. c语言程序设计课用电脑吗,C语言程序设计之简单计算器
  3. php取数组里面数组的值,PHP获取数组的键与值方法小结
  4. php ajax base64,jQuery实现文件编码成base64并通过AJAX上传的方法
  5. eigrp配置实验_【实验】思科与华为的差别——路由的优选
  6. 最小成本排序:两种情况
  7. 支持vxlan的服务器网卡,3台服务器互通vxlan
  8. mybatis 遍历数组_Mybatis中别名、插件与数据源配置
  9. 浏览器http跳转至https问题
  10. Linux 设置定时任务 清空日志