使用FFmpeg将rtsp流转为rtmp流,并在vue项目使用vue-video-player进行播放

使用场景:老总买了安防摄像头,想做一个可以查看摄像头拍摄画面的后台,但是摄像头只给配了 rtsp 的流,h5 上面不支持使用 rtsp 的流直接渲染播放,因此要将 rtsp 转为 rtmp 进行播放,以下操作最终延迟大概在两秒左右

一、下载 Nginx 并修改配置

下载 nginx

官网下载的好像并不能用,好像是缺少了 rtmp 的什么东西吧,不太清楚
这个地址好像也是 nginx 官网的,这个是可以用的,是专适用于 Windows 的?
下载地址在此
在这里插入图片描述
我下载的是这个,下载完成之后解压到合适的位置,我是放在了 E 盘下

下载 nginx-rtmp-win32-dev.zip 并配置

GitHub 网址,下载完成后放在刚才安装的 nginx 目录下解压出来,然后将解压的文件替换到 nginx 目录下
在这里插入图片描述
在这里插入图片描述
打开解压的 Nginx 目录,打开 conf,将里面的 nginx.conf 删掉,将 nginx-win.conf 改名为 nginx.conf,然后打开,在与 http 同级的地方插入以下代码

rtmp {
    server {
        listen 1935;
        application live {
            live on;
        }

        application hls {
            live on;
            hls on;
            hls_path temp/hls;
            hls_fragment 8s;
        }
    }
}

在这里插入图片描述
然后保存

使用

将安装目录下的 nginx.exe 双击打开,第一次提示防火墙阻止什么玩意的点允许即可
打开浏览器输入 localhost 或者 127.0.0.1,显示下方即为成功,这个是使用的 Google 浏览器,已经不支持 flash 了
在这里插入图片描述
使用带 flash 的 360 极速浏览器显示以下画面,此为 nginx-rtmp-win32-dev.zip 里面带的一个测试工具
在这里插入图片描述

二、下载 FFmpeg 并进行使用

FFmpeg官网下载

在这里插入图片描述
使用 Windows 的,将鼠标移到 Windows 图标上
在这里插入图片描述
点击进入可以看到一堆版本,我也不知道具体的区别,下载的这个,大的用着肯定爽
在这里插入图片描述
下载好之后解压到合适的位置,我是放在了 E 盘
在这里插入图片描述
然后将里面的 bin 目录添加到环境变量 path 里面

检查安装是否成功

然后打开 cmd 终端,使用以下命令查看是否安装成功

ffmpeg -version

在这里插入图片描述

使用

随便在网上找个 rtsp 的流试一下,rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov
在这里插入图片描述
打开 cmd 终端,输入以下命令,前面是被转的 rtsp 的流,后面为输出的 rtmp 的流

ffmpeg -rtsp_transport tcp -i "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv "rtmp://localhost:1935/hls/mystream"

在这里插入图片描述
最后一行的字在不断跳动,为成功,使用刚才 nginx-rtmp-win32-dev 带的测试工具测试一下输出的 rtmp 流,没有问题,这里我是使用的 360 极速浏览器,大部分浏览器都不支持 flash 了
在这里插入图片描述

三、vue-video-player

首先安装 vue-video-player

npm install vue-video-player --save

然后在 main.js 里引入

import VideoPlayer from 'vue-video-player'
import 'vue-video-player/src/custom-theme.css'
import 'video.js/dist/video-js.css'
Vue.use(VideoPlayer)

在使用时

<video-player class="video vjs-custom-skin video-style" :options="playerOptions"> </video-player>

import { videoPlayer } from "vue-video-player";
import "video.js/dist/video-js.css";
import "videojs-flash";
//在components里注册一下
components: {
	videoPlayer,
},
//data里面放入playerOptions配置
data(){
	return{
		playerOptions: {
        	height: "574",
        	sources: [
          		{
            		type: "rtmp/mp4",
           			src: "rtmp://127.0.0.1:1935/hls/mystream",
          		},
        	],
        	techOrder: ["flash"],
        	autoplay: true, //如果true,浏览器准备好时开始回放。
        	muted: false, // 默认情况下将会消除任何音频。
        	loop: false, // 视频一结束就重新开始。
        	controls: false,
        	notSupportedMessage: "当前网络差,请查看网络",
        	controlBar: {
          		timeDivider: false, //当前时间和持续时间的分隔符
          		durationDisplay: false, //显示持续时间
          		remainingTimeDisplay: false, //是否显示剩余时间功能
          		fullscreenToggle: true, //全屏按钮
          		playToggle: false, // 暂停-播放 按钮
          		progressControl: false, // 进度条
        	},
      	},
	}
}

在这里插入图片描述
测试一下,完美

ps:因为使用 FFmpeg 输入那个命令要一直开着终端,很不方便,因此可以写 shell 脚本执行

@echo off
if "%1"=="hide" goto CmdBegin
start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit
:CmdBegin

ffmpeg -rtsp_transport tcp -i "rtsp流" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv "rtmp://localhost:1935/hls/mystream"

pause

参考文章:
使用 FFmpeg 将 rtsp 流摄像头视频转码为 rtmp 播放 > 通过 FFmpeg 将 rtsp 流摄像头视频转码为 rtmp 播放

❀❀❀❀❀❀ 完结散花 ❀❀❀❀❀❀

Written ❤️ sywdebug.
对不起,`vue-video-player`插件并不支持直接播放RTSP视频。这个插件主要用于播放常见的视频格式,如MP4、WebM和HLS等。如果你需要在Vue播放RTSP视频,你可能需要使用其他的解决方案。 一种可能的解决方案是使用`hls.js`库来转换RTSP为HLS,然后再使用`vue-video-player`插件来播放HLS。下面是一个简单的示例: 首先,安装所需的依赖: ``` npm install video.js vue-video-player hls.js ``` 然后,在你的Vue组件中使用这些库: ```vue <template> <div> <video-player ref="videoPlayer" :options="playerOptions" @ready="onPlayerReady"></video-player> </div> </template> <script> import 'video.js/dist/video-js.css' import 'vue-video-player/src/custom-theme.css' import VideoPlayer from 'vue-video-player' import Hls from 'hls.js' export default { components: { VideoPlayer }, data() { return { playerOptions: { autoplay: true, controls: true, sources: [{ type: 'application/x-mpegURL', src: 'YOUR_HLS_URL' }] } } }, mounted() { if (Hls.isSupported()) { const video = this.$refs.videoPlayer.$refs.video const hls = new Hls() hls.loadSource('YOUR_RTSP_TO_HLS_URL') hls.attachMedia(video) } }, methods: { onPlayerReady(player) { // player is ready } } } </script> ``` 在上述示例中,你需要将`YOUR_RTSP_TO_HLS_URL`替换为将RTSP流转换为HLS的实际URL。你可以使用工具如`ffmpeg`来完成这个转换过程。 请注意,RTSP的转换和播放可能涉及到服务器端的配置和处理。这只是一个简单的示例,你可能需要根据你的实际需求做一些调整和改进。 希望这个解决方案对你有所帮助!
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值