摄像设备+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 HLShls 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 demandapplication 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 fragmentstypes {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}root /tmp/hls;add_header Cache-Control no-cache;}#HLS配置结束# rtmp statlocation /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 controllocation /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';

5. 在html中访问。

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><title>前端播放m3u8格式视频</title><link href="https://vjs.zencdn.net/7.4.1/video-js.css" rel="stylesheet"><script src='https://vjs.zencdn.net/7.4.1/video.js'></script><script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.15.0/videojs-contrib-hls.min.js"type="text/javascript"></script><!-- videojs-contrib-hls 用于在电脑端播放 如果只需手机播放可以不引入 -->
</head><body><style>.video-js .vjs-tech {position: relative !important;}</style><div><video id="myVideo" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto"data-setup='{}' style='width: 100%;height: auto'><source id="source"src="http://[你的ip地址]/[你的文件名称]wechat.m3u8"type="application/x-mpegURL"></source></video></div><div class="qiehuan"style="width:100px;height: 100px;background: red;margin:0 auto;line-height: 100px;color:#fff;text-align: center">切换视频</div>
</body><script>// videojs 简单使用var myVideo = videojs('myVideo', {bigPlayButton: true,textTrackDisplay: false,posterImage: false,errorDisplay: false,})myVideo.play()var changeVideo = function (vdoSrc) {if (/\.m3u8$/.test(vdoSrc)) { //判断视频源是否是m3u8的格式myVideo.src({src: vdoSrc,type: 'application/x-mpegURL' //在重新添加视频源的时候需要给新的type的值})} else {myVideo.src(vdoSrc)}myVideo.load();myVideo.play();}var src = 'http://[你的ip地址]/[你的文件名称].m3u8';document.querySelector('.qiehuan').addEventListener('click', function () {changeVideo(src);})
</script>

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/692686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【rust】7、命令行程序实战:std::env、clap 库命令行解析、anyhow 错误库、indicatif 进度条库

文章目录 一、解析命令行参数1.1 简单参数1.2 数据类型解析-手动解析1.3 用 clap 库解析1.4 收尾 二、实现 grep 命令行2.1 读取文件&#xff0c;过滤关键字2.2 错误处理2.2.1 Result 类型2.2.2 UNwraping2.2.3 不需要 panic2.2.4 ? 问号符号2.2.5 提供错误上下文-自定义 Cust…

山海鲸可视化软件:多场景下的数据呈现利器

在当今数据驱动的时代&#xff0c;数据可视化成为了企业和个人不可或缺的工具。作为一个老数据人&#xff0c;本文想借用自己常用山海鲸可视化软件&#xff0c;带大家了解在不同使用场景下数据可视化的应用。山海鲸可视化是一款可以免费编辑、本地化部署的产品&#xff0c;对数…

小程序域名可以使用免费的SSL证书吗?

对于小程序域名而言&#xff0c;选择何种类型的SSL证书主要取决于小程序域名的具体情况。如果小程序域名是单独的域名&#xff0c;那么可以选择最为常见的免费单域名证书&#xff1b;如果小程序是公司主域名的子域名&#xff0c;则可以选择免费的通配符证书&#xff0c;一张证书…

facebook群控如何做?静态住宅ip代理在多账号运营重的作用

在进行Facebook群控时&#xff0c;ip地址的管理是非常重要的&#xff0c;因为Facebook通常会检测ip地址的使用情况&#xff0c;如果发现有异常的使用行为&#xff0c;比如从同一个ip地址频繁进行登录、发布内容或者在短时间内进行大量的活动等等&#xff0c;就会视为垃圾邮件或…

【架构】GPU虚拟化

GPU虚拟化方法 远程调用API 半虚拟化和全虚拟化 硬件划分 局限&#xff1a;授权付费 Hardware Partition&#xff1a;Ampere 架构的 A100 GPU 所支持的 MIG&#xff0c;即是一种 Hardware Partition。它的问题是不灵活: 只有高端 GPU 支持&#xff1b;只支持 CUDA 计算&#x…

基于springboot校园志愿者管理系统源码和论文

随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;校园志愿者管理系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;…

电脑恢复删除数据的原理和方法

在恢复数据的时候&#xff0c;很多人都会问&#xff0c;为什么删除的数据还能恢复&#xff1f;本篇和大家一起了解下硬盘上数据的存储方式&#xff0c;文件被删除的时候具体发生了什么&#xff0c;帮助大家理解数据恢复的基本原理。最后还会分享一个好用的数据恢复工具并附上图…

垂起固定翼无人机基础知识,垂起固定翼无人机应用前景,垂起固定翼无人机优缺点分析

无人机定义与类型 无人机&#xff0c;也称为无人驾驶飞行器&#xff0c;是一种无需人工直接操作的航空器。根据其用途、设计及技术特点&#xff0c;可以分为多种类型。垂起固定翼无人机是其中的一种&#xff0c;它具有垂直起降的能力并采用固定翼设计以提高飞行效率和稳定性。…

Excel SUMPRODUCT函数用法(成绩求和,分组排序)

SUMPRODUCT函数是Excel中功能比较强大的一个函数&#xff0c;可以实现sum,count等函数的功能&#xff0c;也可以实现一些基础函数无法直接实现的功能&#xff0c;常用来进行分类汇总&#xff0c;分组排序等 SUMPRODUCT 函数基础 SUMPRODUCT函数先计算多个数组的元素之间的乘积…

解决flask结合layui前端框架模板(laytpl 语法)与gin语法出现冲突的问题。

在模板中加了laytpl的写法 例如&#xff1a; gin框架渲染数据的语法也是{{ }} 例如&#xff1a; 如何两者都出现在html模板页&#xff0c;运行gin框架会识别为框架定义的变量&#xff0c;运行之后发现报如上错误&#xff0c;出现了错误是因为刚好gin的写法也是"{{ 变量 }…

【JavaEE】_CSS选择器

目录 1. 基本语法格式 2. 引入方式 2.1 内部样式 2.2 内联样式 2.3 外部样式 3. 基础选择器 3.1 标签选择器 3.2 类选择器 3.3 ID选择器 4. 复合选择器 4.1 后代选择器 4.2 子选择器 4.3 并集选择器 4.4 伪类选择器 1. 基本语法格式 选择器若干属性声明 2. 引入…

Leetcode日记 290. 单词规律 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配

Leetcode日记 290. 单词规律 给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配 解题思路制作不易&#xff0c;感谢三连&#xff0c;谢谢啦 给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。…

WEB基础及http协议(Apache)

一、httpd安装组成 http服务基于C/S结构 1、常见http服务器程序 httpd apache&#xff0c;存在C10K&#xff08;10K connections&#xff09;问题nginx 解决C10K问题lighttpdIIS .asp 应用程序服务器tomcat .jsp 应用程序服务器jetty 开源的servlet容器&#xff0c;基于Java…

【Java代码审计】本地命令执行函数

1.本地命令执行函数 在服务器中时常会调用命令执行的代码&#xff0c;以完善或加强系统的功能需求&#xff0c;一旦这些调用命令执行的接口被攻击者恶意利用&#xff0c;就会导致服务器沦陷。 在Java中可用于执行系统命令的方式有API有&#xff1a;java.lang.Runtime、java.la…

基于微信小程序的比赛赛程管理系统设计与实现

在全面健身的倡导下通过各级赛事的举办完成体育人才的选拔&#xff0c;当由于缺乏信息化的管理手段而只能通过人工完成比赛报名、赛程制定及成绩记录等流程的管理&#xff0c;因此常常因意外而导致比赛赛程管理不善、成绩不理想等问题出现。为了帮助比赛组织者优化赛程管理流程…

微服务建构思想

微服务架构思想 微服务架构优点 1、易于开发和维护:一个微服务只会关注一个特定的业务功能。所以它业务清晰。代码量较少。开发和维护 单个微服务相对简单。而整个应用是由若干个微服务构建而成的。 2、单个微服务启动较快:单个微服务代码量较少&#xff0c;所以启动比较快。 …

CSS position属性sticky

在开发时&#xff0c;经常会碰到需要这样一种情况 —— 网站滚动到一定高度的时候&#xff0c;让一部分内容作为navbar&#xff0c;也就是置顶显示&#xff0c;我们一般会使用js监听scroll事件来实现&#xff0c;但是新增的css3属性position:sticky可以简单实现&#xff0c;省去…

【动态规划专栏】专题二:路径问题--------6.地下城游戏

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

Vue | (三)使用Vue脚手架(中)| 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 &#x1f4da;Todo-list 案例&#x1f407;组件化编码流程&#xff08;通用&#xff09;&#x1f407;实现静态组件&#x1f407;展示动态数据&#x1f407;交互⭐️添加一个todo⭐️todo勾选实现⭐️删除功能实现⭐️底部统计功能实现⭐️底部全选功能实现⭐️底部一…

Docker从入门到上天系列第二篇:Docker与传统虚拟机对比

&#x1f609;&#x1f609; 欢迎加入我们的学习交流群呀&#xff01; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring、Security、Docker、Grpc、消息中间件、Rpc、SpringCloud等等很多应用和源码级…