1,安装流媒体服务器nginx:
主要参考教程:https://blog.csdn.net/ansu_wl/article/details/83040674
总结起来就是:下载,源码和rtmp扩展包
解压放到~目录下,让它看起来大约这样:
└── nginx-1.15.3 #这个是源码 ├── auto │ ├── cc │ ├── lib │ ├── os │ └── types ├── conf ├── contrib │ ├── unicode2nginx │ └── vim ├── html ├── man ├── nginx-rtmp-module-master #源码下放了rtmp扩展包 │ ├── dash │ ├── doc │ ├── hls │ └── test ├── objs │ ├── addon │ └── src └── src ├── core ├── event ├── http ├── mail ├── misc ├── os └── stream
然后执行安装:
./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=./nginx-rtmp-module-master/ --with-file-aio
大意是:安装到/usr/local/nginx,需要http_ssl_module扩展,添加rtmp扩展,路径是./nginx-rtmp-module-master/,需要file-aio(咱也不知道那是啥),
然后就开始配置了,
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ using system zlib library
nginx path prefix: "/usr/local/nginx" nginx 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"
然后进行安装的常规操作
make j6
make install
查看端口:sudo netstat -tlpn
2,ffmpeg命令行推流
推流流程:
1),首先要配置一个流服务器:
配置文件(网上抄的):
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } rtmp { server { listen 1935; #直播流配置 application rtmplive { live on; #为 rtmp 引擎设置最大连接数。默认为 off max_connections 521; } application hls{ live on; hls on; hls_path /var/www/hls; hls_fragment 1s; } } }
2),#开启nginx服务
cd /usr/local/nginx/sbin
sudo ./nginx
3),开启ffmpeg推流:
cd /usr/local/ffmpeg/bin
./ffmpeg -re -i ~/temp/ffmpeg/video/1.wmv -f flv rtmp://192.168.3.188:1935/rtmplive/room
#接流:rtmp://192.168.3.188:1935/rtmplive/room
3,nginx有关命令
1)nginx Start/Stop/Restart
sudo /usr/local/nginx/sbin/nginx
sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx -s reload
2)测试nginx的配置文件是不是有错误
sudo /usr/local/nginx/sbin/nginx -t
返回successful就是没问题
3,nginx配置文件的含义
基本分为如下几方面:
##目录
##全局配置
##http服务器配置
##server配置1
##location配置1
##location配置2
##server配置2
##rtmp配置
详解:
##全局配置 user nobody nobody; #访问的时候默认使用的用户是nobody,nobody并不是没有,而是真有此用户,但是打开此设置会报错,还是不要打开吧。。。 worker_processes 2; #指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存,建议和核心数量一样 error_log logs/error.log notice; #全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit pid logs/nginx.pid; #主模块指令,用来指定进程pid的存储文件位置 worker_rlimit_nofile 65535; #worker_rlimit_nofile用于绑定worker进程和CPU,具体怎么绑的不知 events{ #events事件指令是设定Nginx的工作模式及连接数上限 use epoll; #设置nginx工作模式,Linux系统,epoll工作模式是首选。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll worker_connections 512; } ##全局配置结束 ##http服务器配置 http{ include conf/mime.types; #指向的是conf下的mime.types文件 default_type application/octet-stream; #默认访问为二进制流 log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; #log_format是Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式,main表示此日志输出格式的名称 log_format download '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_range" "$sent_http_content_range"'; client_max_body_size 20m; #设置允许客户端请求的最大的单个文件字节数 client_header_buffer_size 32K; #指定来自客户端请求头的headerbuffer大小。大部分时候1k就够了 large_client_header_buffers 4 32k; #指定客户端请求中较大的消息头的缓存最大数量和大小, “4”为个数,“128K”为大小,最大缓存量为4个128K; sendfile on; #开启高效文件传输模式。 tcp_nopush on; tcp_nodelay on; #tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞; keepalive_timeout 60; #设置客户端连接保持活动的超时时间。 client_header_timeout 10; #设置客户端请求头读取超时时间,如果超时客户仍旧没有发送数据,那就返回408 client_body_timeout 10; #户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,返回408 send_timeout 10; #send_timeout指定响应客户端的超时时间。 ##服务器配置暂时结束 ##HttpGzip模块在Nginx配置中的相关属性设置 # #这个我们没装,不信可以查看命令./nginx -V ##HttpGzip模块在Nginx配置中的相关属性设置结束 ##负载均衡配置 #因为我们目前仅有1个server所以我们不需要均衡,略过 ##负载均衡配置结束 ##server虚拟主机配置(如果没说错的话,server应该是写在服务器配置中的) server{ listen 80; #listen用于指定虚拟主机的服务端口 server_name localhost; #server_name用来指定IP地址或者域名,多个域名可以用空格分开 index index.html index.htm index.php; #index用于设定访问的默认首页地址 root /home/lvnv/webroot; #root指令用于指定虚拟主机的网页根目录 charset gb2312; #Charset用于 设置网页的默认编码格式 access_log off; #access_log用来指定此虚拟主机的访问日志存放路径 ##location配置在虚拟主机配置内部,稍微有些复杂,涉及正则,没细研究,主要作用是通过指定正则表达式与客户端请求的URI相匹配 location / { root /home/lvnv/webroot; index index.php index.html index.htm; } } ##server虚拟主机配置结束 }