当前位置: 首页 > article >正文

使用Nginx代理访问服务器的.mp4文件,并使用Vue播放

一、使用Docker部署单节点Nginx

1、在CentOS上安装部署Docker

请参考:https://blog.csdn.net/yueyue763184/article/details/126776158?spm=1001.2014.3001.5502

2、拉取最新版Nginx镜像

docker pull nginx

3、创建后面需要映射的文件夹

mkdir -p /home/nginx/www /home/nginx/logs /home/nginx/conf

4、先启动预备Nginx,仅仅用于获取配置文件

docker run -d -p 9001:80 --name nginx0 -v /home/nginx/www:/usr/share/nginx/html -v /home/nginx/logs:/var/log/nginx  nginx

进入nginx0容器:

docker exec -it nginx0 /bin/bash

查看nginx.conf配置文件位置:

5、拷贝,修改nginx.conf文件

exit或者Ctrl+D退出容器,然后拷贝配置文件:

cd /home/nginx
docker cp nginx0:/etc/nginx/nginx.conf conf/nginx.conf

修改 nginx.conf 配置文件:

vim conf/nginx.conf
user  root;
worker_processes  1;
 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    keepalive_timeout  65;
 
    #gzip  on;
 
    include /etc/nginx/conf.d/*.conf;
 
    server {
		listen       80;
		server_name  localhost;
		charset utf-8;
 
		location /images/ {
			alias  /home/nginx/www/images;#ok
			autoindex on; ##显示索引
			autoindex_exact_size on; ##显示大小
			autoindex_localtime on; ##显示时间
		}
		error_page  404              /404.html;
	}
}

在/home/nginx/www目录下创建images文件夹,并上传.mp4文件在其下

 接下来就可以删除nginx0,重新创建运行一个容器nginx:

docker stop nginx0
docker rm nginx0
docker run -d -p 9001:80 --name nginx -v /home/nginx/www:/usr/share/nginx/html -v /home/nginx/logs:/var/log/nginx  nginx

 确保防火墙9001端口已经开了,就可以远程访问了:

 二、在Vue中播放.mp4视频

 主要是使用video来播放

npm install video.js --save

index.vue

<template>
  <div>
    <span class="spheader">监控视频:</span>
    <!-- 视频 -->
    <div  v-for="item in videoUrl" class="sp">
      <video id="myVideo" ref="myVideo" controls class="shiping1 video-js vjs-big-play-centered">
        <source :src="item.url" type="video/mp4" >
      </video>
      <!-- 时间 -->
      <span class="time">{{item.time}}</span>
    </div>
  </div>
</template>

<script>
import Video from 'video.js'
import 'video.js/dist/video-js.css'
export default {
  data() {
    return {
      playHandler: null,
      videoUrl: [
        {"url": 'http://ip:9001/images/222.mp4', "time": "2023-03-06 12:10:00"},
        {"url": 'http://ip:9001/images/333.mp4', "time": "2023-03-06 12:06:00"},
        {"url": 'http://ip:9001/images/222.mp4', "time": "2023-03-06 12:03:00"}
      ]
    }
  },
  updated() {
    // 初始化获取数据
    this.fetchVideoList(this.id)
    setTimeout(() => {
      this.initVideo()
    }, 300)
    this.playHandler.dispose()
  },
  async initVideo() {
    this.$nextTick(() => {
      this.playHandler = Video('myVideo', {
        // 确定播放器是否具有用户可以与之交互的控件。没有控件,启动视频播放的唯一方法是使用autoplay属性或通过Player API。
        controls: true,
        // 自动播放属性,muted:静音播放
        autoplay: 'muted',
        // 建议浏览器是否应在<video>加载元素后立即开始下载视频数据。
        preload: 'auto',
        // 设置视频播放器的显示宽度(以像素为单位)
        width: '650px',
        // 设置视频播放器的显示高度(以像素为单位)
        height: '400px'
      })
    })
  },

  /**
   * @function  获取视频素材详情
   */
  async fetchVideoList(id) {
    const res = await materialApi.query({id})
    if (res.code === 0) {
      this.form = res.data
      this.$refs.myVideo.src = res.data.cosPath
      console.log(this.form, 'this.video.form', this.$refs.myVideo.src)
    }
  }
}
</script>

<style>
@import "./index.css";
</style>

index.css

.sp{
    margin: 30px 0 0 30px;
    width:350px;
    height:250px;
    float:left;
}
.shiping1{
    border: 2px solid black;
    width: 100%;
    height: 200px;
    float:left;
}
.spheader{
    color: #254765;
    font-size: 18px;
    position: absolute;
    left: 220px;
    top: 70px;
}
.time{
    color: #254765;
    position: relative;
    top: 10px;
}

效果: 


http://www.kler.cn/a/6918.html

相关文章:

  • css数据不固定情况下,循环加不同背景颜色
  • UniApp在Vue3的setup语法糖下自定义组件插槽详解
  • 微博短链接平台-项目测试用例设计(Xmind)
  • 刘艳兵-DBA036-Oracle数据库中的触发器(Trigger)可以在以下哪种情况下自动执行?
  • 深挖C++赋值
  • 热点更新场景,OceanBase如何实现性能优化
  • 鲁大师2023年Q1季度电动车报告:九号独占八榜,差异化竞争完成产品破圈
  • Leetcode.404 左叶子之和
  • PCB技巧(二)
  • Python基础(一)
  • 【C语言】关于我回头学的那些基础语法(一)
  • IntelliJ IDEA 2023.1 最新变化
  • 【数据中心】能效诊断和升级改造提高PUE能源利用效率
  • Type javax.servlet.http.HttpServletRequest not present
  • 安全防御 --- 入侵检测 --- IDS、IPS
  • 将Mircrosoft Store下载的Ubuntu安装到指定位置方法,同时解决“你需要来自System的权限才能对此文件进行更改”问题
  • android framework-zygote进程
  • 计算机网络复习笔记(二)体系结构
  • 桌面端编程之精品课程
  • 【Python】轻松掌握基础语法(一)
  • 买卖股票的最佳时机
  • 让ChatGPT在中断回答的时候自动输入「请接上文继续」并发送
  • ElasticSearch ( 七 ) Mapping映射和数据迁移
  • 科研实验试剂:mPEG Estrogen,PEG-Estrogen,甲氧基聚乙二醇雌激素,用于多肽合成支持
  • 微信小程序二维码的生成方式
  • iPhone手机小技巧:使用备忘录创建清单