摄像设备+nginx+rtmp服务器

前言

由于html中的video现在不支持rtmp协议(需要重写播放器框架,flash被一刀切,360浏览器还在支持flash),遂用rtmp作为桥梁,实际是hls协议在html中起作用. 在此推荐一款前端播放器,.ckplayer 简直了,写点页面,一直循环,洗脑神曲 dream it possible.

搭建nginx服务器

环境准备

1.下载环境

nginx包: nginx包 RTMP模块包:nginx-http-flv-module 模块包

2.依赖项

复制代码
yum -y install unzip
yum -y install gcc-c++ 
yum -y install pcre pcre-devel  
yum -y install zlib zlib-devel 
yum -y install openssl openssl-devel

3.安装

新建nginx路径

复制代码
mkdir /usr/local/nginx

将下载的模块包复制到nginx目录下,并解压

复制代码
cp /opt/toos/nginx-http-flv-module-1.2.6.zip  /usr/local/nginx/nginx-http-flv-module
cd /usr/local/nginx
unzip nginx-http-flv-module

安装nginx服务器

复制代码
tar -zxvf nginx-1.8.1.tar.gz
cd nginx-1.8.1
./configure --prefix=/usr/local/nginx  --add-module=/usr/local/nginx/nginx-http-flv-module
make && make install

【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~

nginx服务器配置文件

复制代码
#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 {
       allow publish all;
       listen 1935;
       ping 30s;
       notify_method get;

       application myapp {
           live on;

           # sample play/publish handlers
           #on_play http://localhost:8080/on_play;
           #on_publish http://localhost:8080/on_publish;

           # sample recorder
           #recorder rec1 {
           #    record all;
           #    record_interval 30s;
           #    record_path /tmp;
           #    record_unique on;
           #}

           # sample HLS
           hls on;
           hls_path /tmp/hls;
           # hls_sync 100ms;
           hls_fragment 5s; 
           hls_cleanup off;
           record all;

           record_path /tmp/record;
           record_unique on;
       }
        
       # Video on demand
       application vod {
       #    play /var/Videos;
            play /usr/local/video;
       }

       # Video on demand over HTTP
       #application vod_http {
       #    play http://localhost:8080/vod/;
       #}
   }
}
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;

   sendfile        on;
   #tcp_nopush     on;

   #keepalive_timeout  0;
   keepalive_timeout  65;

   #gzip  on;

server {
   listen       80;
   server_name  localhost;

   #charset koi8-r;

   #access_log  logs/host.access.log  main;

      


  # location / {
   #    root   /tmp/hls;
   #    
   #}


   #HLS配置开始,这个配置为了`客户端`能够以http协议获取HLS的拉流
   location / {
   add_header Access-Control-Allow-Origin *;
   	add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
   	add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

       index  index.html index.htm;
       # Serve HLS fragments
       types {
           application/vnd.apple.mpegurl m3u8;
           video/mp2t ts;
       }
       root /tmp/hls;
       add_header Cache-Control no-cache;
   }
   #HLS配置结束

   # rtmp stat
   location /stat {
       rtmp_stat all;
       rtmp_stat_stylesheet stat.xsl;
   }
   location /stat.xsl {
       # you can move stat.xsl to a different location
       # root /usr/build/nginx-rtmp-module;
       root /usr/local/src/nginx-rtmp-module-1.2.1;
   }

   # rtmp control
   location /control {
       rtmp_control all;
   }


   #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;
   }

}


   # 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;
   #    }
   #}

4.ffmpeg推码

下载ffmpeg模块包 ffmpeg模块包:ffmpeg

查询设备

复制代码
ffmpeg -list_devices true -f dshow -i dummy

测试录像设备可用

复制代码
ffplay -f dshow -i video="BisonCam, NB Pro"  

ffmpeg -f dshow -i video="BisonCam, NB Pro" -vcodec libx264 -vf scale=320:240 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://[ip地址]/[你的application,我上面的application写的[myapp]]myapp/[文件名称]wechat

跨域问题(在nginx中添加跨域)

复制代码
add_header Access-Control-Allow-Origin *;
    	add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    	add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
  1. 在html中访问。

    前端播放m3u8格式视频
    切换视频

原文链接 摄像设备+nginx+rtmp服务器 - 掘金

相关推荐
虎头金猫8 小时前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
还是大剑师兰特9 小时前
解决nginx错误:http://localhost:7000正常,http://localhost:7000/map 报错404
nginx·大剑师
AI职业加油站10 小时前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
此冬歌咏11 小时前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
xing-xing11 小时前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
-梅11 小时前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog12 小时前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
张洛闻Eren12 小时前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
琥珀色糖12 小时前
SimlpeHttp
linux·服务器
其实防守也摸鱼12 小时前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透