vue.js实现移动端直播 - 源码分享
时间:2018-11-14
本文章向大家介绍基于Vue 的直播播放器,需要的朋友可以参考一下
新建一个vue 项目
livepusher.vue
<template> <div> <br /> <div id="pusher" style="width:300px;height:400px;background-color:#000000;margin:auto"></div> <br /> <div style="text-align:center; margin:auto;"> <input id="path" type="text" value="" placeholder="请输入直播服务器地址(rtmp)" /> <button id="pp" v-on:click="ppPusher()">开始</button> </div> <div class="button" v-on:click="switchCamera()">切换摄像头</div> </div> </template> <script> export default { data () { return { bstart: false, pusher: null } }, created () { document.addEventListener("plusready", this.plusReady, false); }, methods: { switchCamera () { this.pusher.switchCamera(); }, plusReady () { // 创建直播推流控件 this.pusher = new plus.video.LivePusher("pusher", { url: "rtmp://testlivesdk.v0.upaiyun.com/live/upyunb" }); // 监听状态变化事件 this.pusher.addEventListener( "statechange", function (e) { console.log("statechange: " + JSON.stringify(e)); }, false ); }, ppPusher () { if (this.bstart) { this.pusher.stop(); this.bstart = false; } else { var path = document.getElementById("path").value; if (path && path.length > 0) { this.pusher.setOptions({ url: path }); this.pusher.start(); this.bstart = true; } else { plus.nativeUI.toast("请输入直播服务器地址"); } } var pp = document.getElementById("pp"); pp.innerText = this.bstart ? "停止" : "开始"; } } } </script> <style scoped> input { width: 70%; font-size: 16px; padding: 0.2em 0.2em; border: 1px solid #00b100; -webkit-user-select: text; } .button, button { width: 20%; margin: 6px 0 6px 6px; font-size: 16px; color: #fff; background-color: #00cc00; border: 1px solid #00b100; padding: 0.2em 0em; -webkit-border-radius: 5px; border-radius: 5px; } </style>
videoplayer.vue
<template> <div> <br /> <div id="video" style="width:98%;height:300px;background-color:#000000;margin:auto"></div> <br /> <div style="text-align:center; margin:auto;"> <input id="path1" type="text" value="http://192.168.100.14:8080/live/hello.m3u8" placeholder="请输入视频地址,支持mp4/flv格式" /> <button onclick="playVideo1()">播放</button> <br /> <input id="path2" type="text" value="rtmp://192.168.100.14:1935/stream" placeholder="请输入视频地址,支持rtmp直播" /> <button onclick="playVideo2()">直播</button> </div> <div id="pp" class="button" onclick="ppVideo()">播放</div> </div> </template> <script> export default { data () { return { bstart: false, pusher: null } }, created () { document.addEventListener('plusready', this.plusReady, false); }, methods: { plusReady () { // 创建视频播放控件 video = new plus.video.VideoPlayer('video', { src: 'http://192.168.100.14:8080/live/hello.m3u8' }); video.addEventListener('play', function () { updatePlaying(true); }, false); video.addEventListener('pause', function () { updatePlaying(false); }, false); }, // 播放 playVideo1 () { var path = document.getElementById('path1').value; if (path && path.length > 0) { video.setOptions({ src: path }); video.play(); } } , playVideo2 () { var path = document.getElementById('path2').value; if (path && path.length > 0) { video.setOptions({ src: path }); video.play(); } }, // 更新为播放状态 updatePlaying (play) { playing = play; document.getElementById('pp').innerText = playing ? '暂停' : '播放'; }, // 播放/暂停 ppVideo () { playing ? video.pause() : video.play(); } } } </script> <style scoped> input { width: 70%; font-size: 16px; padding: 0.2em 0.2em; border: 1px solid #00b100; -webkit-user-select: text; } button, .button { width: 20%; margin: 6px 0 6px 6px; font-size: 16px; color: #fff; background-color: #00cc00; border: 1px solid #00b100; padding: 0.2em 0em; -webkit-border-radius: 5px; border-radius: 5px; } </style>
推流效果与播流效果
- 分析漏洞利用工具包 Archie和Astrum工具包
- 手游热更新方案xLua开源:Unity3D下Lua编程解决方案
- 如何为Keras中的深度学习模型建立Checkpoint
- Dubbo 源码解析 —— Zookeeper 创建节点
- 熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker
- 源码级别解读 mybatis 插件
- 在WebKit中并行加载外部脚本译:
- 100行代码,搞定http监控框架
- 【腾讯反病毒实验室】深度剖析APT28最新作品
- [译]clearfix改良及overflow:hidden详解
- 深入解析CSS样式层叠权重值
- [译]CSS边框实现“无图化”设计
- 自适应的多列图文混排改进
- [译]Laravel 5.0 之运行环境及环境变量
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux centos 安装Jenkins(非docker方式)
- mysql5.7 derived_merge=on 弄丢了我的 order by!
- 用nrm轻松管理npm镜像 自用 实践笔记
- 模拟战役(DFS||并查集解法)
- 学会这些(滑动关机、应用多开、QQ微信消息攻击、表白神器),逼格瞬间提升1000倍
- 位数问题
- 题目 2229: [蓝桥杯][算法训练]最大最小公倍数
- 武汉工程大学2020GPLT选拔赛(重现赛)详细代码讲解
- 用邻接链表存图 详讲
- strstr函数的详细讲解
- ICPC Pacific Northwest Regional Contest 2019 C D E M 题解
- wordpress:您的主机禁用了mail()函数,找回用户名和密码
- AtCoder Beginner Contest 166 A ~~E
- AtCoder Beginner Contest 165 A ~~D
- 离散化思想详细讲解