Vue 实现HLS以及RTSP流播放(亲测可用)

7,526 阅读1分钟

HLS播放:

HLS流直接用 video.js插件可以进行播放 

大概如下:

<video v-show="false" id="videoPlayer" class="video-js vjs-default-skin" playsinline autoplay="autoplay">   <source src="https://cdn.zhixueyun.com/default/M00/05/C9/CqJGV10v5NyECg5jAAAAAKnCCyI547_t/index.m3u8" type="application/x-mpegURL" /> </video>


....import videojs from 'video.js';import 'video.js/dist/video-js.css';

...

videojs('videoPlayer', {
    autoplay: false, // 设置自动播放    muted: true, // 设    preload: 'auto', // 预加载    controls: true, // 显示播放的控件
   });

RTSP播放:

rtsp流需要再转码才能 播放 ,目前采用的是本地开启一个webrtc-streamer服务进行监听转码 然后再进行播放(webrtc-streamer下载地址),如果部署到服务器上 需要把webrtc-streamer服务也开启。

  1. 下载解压之后开启 webrtc-streamer.exe文件 

  2. 出现这个地址及端口说明成功开启 

  3. 然后封装一个播放的组件  把解压的文件html->webrtcstreamer.js文件拿出来

再创建一个vue组件 如下:

<!-- * @Description: rtsp视频播放--><template>    <div class="webrtcSteamer s-fill s-flex">        <video id="video" class="video-js" controls autoplay autobuffer muted preload="auto"></video>    </div></template><script>import WebRtcStreamer from './webrtcstreamer.js';export default {    props: {        scale: {            type: Number,            required: true,        },        videoUrl: {            type: String,            required: true,        },    },    data() {        return {            httpServer: '',            rtspUrl: this.videoUrl,            player: null,            webRtcServer: null,            videoSeting: {                language: 'zh-CN',                autoplay: true, // true/false 播放器准备好之后,是否自动播放 【默认false】                controls: true, // /false 是否拥有控制条 【默认true】,如果设为false ,那么只能通过api进行控制了。也就是说界面上不会出现任何控制按钮                loop: false, // /false 视频播放结束后,是否循环播放                muted: true, // /false 是否静音                poster: '', // 播放前显示的视频画面,播放开始之后自动移除。通常传入一个URL                preload: 'auto', // 预加载   ‘auto‘ 自动   ’metadata‘ 元数据信息 ,比如视频长度,尺寸等 ‘none‘ 不预加载任何数据,直到用户开始播放才开始下载                bigPlayButton: true,            },          };    },    mounted() {        var a = `${window.location.href}`;        var b = a.split(':');        // webrtc-streamer 服务开启的地址        this.httpServer = `${b[0]}:${b[1]}:8000/` || `http://192.168.5.123:8000`;        // 初始化webrec服务        this.webRtcServer = new WebRtcStreamer('video', this.httpServer);        this.webRtcServer.connect(this.rtspUrl);    },    methods: {        playVideo() {            this.webRtcServer.connect(this.rtspUrl);        },    },};</script><style lang="scss" scoped>.webrtcSteamer {    height: 100%;    width: 100%;    &-num {        color: #06fbfc;        font-weight: 500;        font-family: 'PingFang SC';    }}.video-js {    width: 100%;    height: 100%;}</style>

结构如下:

然后引入  webrtcSteamer.vue组件进行地址传参即可播放:

<!-- videoUrl="rtsp://zephyr.rtsp.stream/pattern?streamKey=3a0e99615f5ff4b1f761360827f358c8" --> <webrtcSteamer :videoUrl="dashboardCamera.url" :scale="1" />

测试m3u8地址为:

https://cdn.zhixueyun.com/default/M00/05/C9/CqJGV10v5NyECg5jAAAAAKnCCyI547_t/index.m3u8

测试的rtsp地址可以去 相关rtsp网站 申请 

效果图: