zoukankan      html  css  js  c++  java
  • TcPlayer腾讯播放器

    TcPlayer腾讯播放器

    业务需求:

    直播过程中需要不断的拉流进行播放,遇到网络突然中断的情况时,直播推流中断会中断;此时因为播放器拉流失败无法正常播放而导致播放器会播放失败。当直播恢复推流恢复时候,播放器需要自动恢复拉流来自动恢复直播播放。综合了常用的播放器做对比,对比结果如下:

    1. 阿里云播放器(aliplayer)推流中断时播放失败,此时其可以设置指定重复拉流次数的恢复拉流尝试,当达到尝试的次数时,播放器会报错,提示信息不是很明显,当再次恢复推流时候,会一直停留在播放失败的页面;
    2. 腾讯播放器(TcPlayerLite)推流失败时有指定的错误提示【 **根据不同的错误码设置不同的错误提示 **】,方便用户知晓直播状态;当直播失败时可以在播放界面显示视频封面,相对来说比较美观;
    3. aliplayer不支持直播暂停tcplayer支持直播暂停【因为当时Android手机的同层播放时,支持直播暂停,直播中断时,手机上会不断尝试拉流,直至正常播放】,因此为了达到与手机微信端一致的效果,就采取了此方案。
    4. aliplayer配置直播地址的参数是固定的【 source 】,直播地址没有要求;而tcplayer配置直播地址属性的参数是收到直播推流地址影响的【 m3u8、flv等】,同时可以配置多个推流地址,在手机端和PC端会自动切换【浏览器支持flash的话会自动匹配flv格式的直播】。

    代码配置:

    1. head 标签中引入播放器的cdn;
    2. 在页面创建播放器容器,样式自定义;
    3. 初始化视频直播播放器。
    <!DOCTYPE html>
    <html lang="en">
    	<head>
    		<meta charset="utf-8" />
    		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
    		<meta name="viewport" content="width=device-width,initial-scale=1.0" />
    		<!-- TCPlayerLite 初始化cdn -->
    		<script src="https://imgcache.qq.com/open/qcloud/video/vcplayer/TcPlayer-2.3.3.js"></script>
    		<!-- or -->
    		<script src="https://cloudcache.tencent-cloud.com/open/qcloud/video/vcplayer/TcPlayer-2.3.3.js"></script>
    	</head>
    	<body>
    		<div id="app">
    			<!-- 初始化播放器 -->
    			<div id="tc_palyer_lite" style="100%; height:auto;"></div>
    		</div>
    	</body>
    </html>
    

    初始化直播播放器

    • 设置直播拉流地址和视频播放器封面;
    • 设置H5兼容(微信同层播放设置);
    • 设置播放器错误码以及对应提示信息;
    • 设置直播失败定时重连。
    export default {
    	name: "TcPlayer",
    	data() {
    		return {
    			player: null,
    			videoUrl: "https://myun-hw-s3.myun.tv/e54ypd59/5z4op6m0/l7b9r8g0/0eyv9aal_1559181924071539192_origin.m3u8" /* 直播拉流地址 */,
    			poster: "" /* 视频封面 */
    		};
    	},
    	mounted() {
    		this.initPlayer();
    	},
    	methods: {
    		// 初始化播放器
    		initPlayer() {
    			if (this.player) {
    				this.player.destroy();
    				this.player = null;
    			}
    
    			let options = {
    				m3u8: this.videoUrl /* 播放地址 */,
    				// mp4: "" /* 回看地址 */,
    				// poster: this.poster /* 视频封面 */,
    				live: false /* 是否直播 */,
    				autoplay: true,
    				poster: { style: "cover", src: this.poster },
    				pausePosterEnabled: true /* 暂停时显示封面 默认为true */,
    				wording: {
    					1002: "即将直播,请稍等",
    					2032: "请求视频失败,请检查网络",
    					2048: "请求m3u8文件失败,可能是网络错误或者跨域问题"
    				},
    				controls: "system", //default||'' 显示默认控件,none 不显示控件,system 移动端显示系统控件
    				x5_player: true,
    				x5_type: "h5-page",
    				x5_fullscreen: true,
    				listener: function(msg) {
    					// 播放失败,重新连接
    					if (msg.type == "error") {
    						setTimeout(() => {
    							this.player.load(); // 重连
    						}, 4000);
    					}
    				}
    			};
    			// 初始化
    			this.player = new TcPlayer("tc_player_view", options);
    		}
    	}
    };
    

    参数列表:

    参数 类型 默认值 参数说明
    m3u8 String 原画 M3U8 播放 URL。
    m3u8_hd String 高清 M3U8 播放 URL。
    m3u8_sd String 标清 M3U8 播放 URL。
    flv String 原画 FLV 播放 URL。
    flv_hd String 高清 FLV 播放 URL。
    flv_sd String 标清 FLV 播放 URL。
    mp4 String 原画 MP4 播放 URL。
    mp4_hd String 高清 MP4 播放 URL。
    mp4_sd String 标清 MP4 播放 URL。
    rtmp String 原画 RTMP 播放 URL。 示例:rtmp://xxxxxxxxxxxxxxx_
    rtmp_hd String 高清 RTMP 播放 URL。 示例:rtmp://xxxxxxxxxxxxxxxx_hd
    rtmp_sd String 标清 RTMP 播放 URL。 示例:rtmp://xxxxxxxxxxxxxxxxx_sd
    width Number 必选,设置播放器宽度,单位为像素。 示例:640
    height Number 必选,设置播放器高度,单位为像素。 示例:480
    volume Number 0.5 设置初始音量,范围:0到1 [v2.2.0+]。 示例:0.6
    live Boolean false 必选,设置视频是否为直播类型,将决定是否渲染时间轴等控件,以及区分点直播的处理逻辑。
    autoplay Boolean false 是否自动播放。(备注:该选项只对大部分 PC 平台生效
    poster String / Object 预览封面,可以传入一个图片地址或者一个包含图片地址 src 和显示样式 style 的对象。- default 居中1:1显示;- stretch 拉伸铺满播放器区域,图片可能会变形;- cover 优先横向等比拉伸铺满播放器区域,图片某些部分可能无法显示在区域内。 示例: "xxxxxxxxx.jpg" 或者{"style": "cover", "src": xxxxxxx.jpg} [v2.3.0+]
    controls String "default","system" default 显示默认控件,none 不显示控件,system 移动端显示系统控件。(备注:如果需要在移动端使用系统全屏,就需要设置为 system。默认全屏方案是使用 Fullscreen API + 伪全屏的方式,在线示例
    systemFullscreen Boolean false 开启后,在不支持 Fullscreen API 的浏览器环境下,尝试使用浏览器提供的 webkitEnterFullScreen 方法进行全屏,如果支持,将进入系统全屏,控件为系统控件。
    flash Boolean true 是否优先使用 Flash 播放视频。(备注:该选项只对 PC 平台生效[v2.2.0+])
    flashUrl String 可以设置 flash swf url。 (备注:该选项只对 PC 平台生效 [v2.2.1+])
    h5_flv Boolean false 是否启用 flv.js 的播放 flv。启用时播放器将在支持 MSE 的浏览器下,采用 flv.js 播放 flv,然而并不是所有支持 MSE 的浏览器都可以使用 flv.js,所以播放器不会默认开启这个属性,[v2.2.0+]。
    x5_player Boolean false 是否启用 TBS 的播放 flv 或 hls 。启用时播放器将在 TBS 模式下(例如 Android 的微信、QQ 浏览器),将 flv 或 hls 播放地址直接赋给 <video> 播放。
    x5_type String 通过 video 属性 “x5-video-player-type” 声明启用同层 H5 播放器,支持的值:h5-page (该属性为 TBS 内核实验性属性,非 TBS 内核不支持);
    示例:"h5-page"
    x5_fullscreen String 通过 video 属性 “x5-video-player-fullscreen” 声明视频播放时是否进入到 TBS 的全屏模式,支持的值:true (该属性为 TBS 内核实验性属性,非 TBS 内核不支持) 。
    示例:"true"
    x5_orientation Number 通过 video 属性 “x5-video-orientation” 声明 TBS 播放器支持的方向,可选值:0(landscape 横屏),1:(portraint竖屏),2:(landscape | portrait 跟随手机自动旋转)。 (该属性为 TBS 内核实验性属性,非 TBS 内核不支持) [v2.2.0+]。
    示例:0
    wording Object 自定义文案。 示例:{ 2032: '请求视频失败,请检查网络'}
    clarity String 'od' 默认播放清晰度[v2.2.1+]。 示例: clarity: 'od'
    clarityLabel Object {od: '超清', hd: '高清', sd: '标清'} 自定义清晰度文案 [v2.2.1+]。 示例: clarityLabel: {od: '蓝光', hd: '高清', sd: '标清'}。
    listener Function 事件监听回调函数,回调函数将传入一个 JSON 格式的对象。 示例:function(msg){//进行事件处理 }
    pausePosterEnabled Boolean true 暂停时显示封面[v2.3.0+]。
    preload String 'auto' 配置 video 标签的 preload 属性,只有部分浏览器生效[v2.3.0+]。
    hlsConfig Object hls.js 初始化配置项[v2.3.0+]。
    flvConfig Object flv.js 初始化配置项[v2.3.1+]。

    实例方法:

    方法 参数 返回值 说明 示例
    play() 开始播放视频。 player.play()
    pause() 暂停播放视频。 player.pause()
    togglePlay() 切换视频播放状态 。 player.togglePlay()
    mute(muted) {Boolean} [可选] true,false {Boolean} 切换静音状态,不传参则返回当前是否静音。 player.mute(true)
    volume(val) {int} 范围:0到1 [可选] 范围:0到1 设置音量,不传参则返回当前音量 。 player.volume(0.3)
    playing() true,false {Boolean} 返回是否在播放中 。 player.playing()
    duration() {int} 获取视频时长 。(备注:只适用于点播,需要在触发 loadedmetadata 事件后才可获取视频时长 player.duration()
    currentTime(time) {int} [可选] {int} 设置视频播放时间点,不传参则返回当前播放时间点 。(备注:只适用于点播 player.currentTime()
    fullscreen(enter) {Boolean} [可选] true,false {Boolean} 调用全屏接口(Fullscreen API),不支持全屏接口时使用伪全屏模式,不传参则返回值当前是否是全屏。 (备注:移动端系统全屏没有提供 API,也无法获取系统全屏状态 player.fullscreen(true)
    buffered() 0到1 获取视频缓冲数据百分比。 (备注:只适用于点播 player.buffered()
    destroy() 销毁播放器实例[v2.2.1+]。 player.destroy()
    switchClarity() {String}[必选] 切换清晰度,传值 "od"、"hd"、"sd" [v2.2.1+]。 player.switchClarity('od')
    load(url) {String}[必选] 通过视频地址加载视频。(备注:该方法只能加载对应播放模式下支持的视频格式,Flash 模式支持切换 RTMP、FLV、HLS 和 MP4 ,H5 模式支持 MP4、HLS 和 FLV(HLS、FLV 取决于浏览器是否支持)[v2.2.2+]) player.load([http://xxx.mp4](http://xxx.mp4))

    错误码:

    Code 提示语 说明
    1 网络错误,请检查网络配置或者播放链接是否正确。 H5 提示的错误。
    2 网络错误,请检查网络配置或者播放链接是否正确。 视频格式 Web 播放器无法解码。H5 提示的错误。
    3 视频解码错误。 H5 提示的错误。
    4 当前系统环境不支持播放该视频格式。 H5 提示的错误。
    5 当前系统环境不支持播放该视频格式。 播放器判断当前浏览器环境不支持播放传入的视频,可能是当前浏览器不支持 MSE 或者 Flash 插件未启用。
    10 请勿在 file 协议下使用播放器,可能会导致视频无法播放。 -
    11 使用参数有误,请检查播放器调用代码。 -
    12 请填写视频播放地址。 -
    13 直播已结束,请稍后再来。 RTMP 正常播放过程中触发事件(NetConnection.Connect.Closed)。Flash 提示的错误。
    1001 网络错误,请检查网络配置或者播放链接是否正确。 网络已断开(NetConnection.Connect.Closed)。Flash 提示的错误。
    1002 获取视频失败,请检查播放链接是否有效。 拉取播放文件失败(NetStream.Play.StreamNotFound),可能是服务器错误或者视频文件不存在。Flash 提示的错误。
    2032 获取视频失败,请检查播放链接是否有效。 Flash 提示的错误。
    2048 无法加载视频文件,跨域访问被拒绝。 请求 M3U8 文件失败,可能是网络错误或者跨域问题。Flash 提示的错误。
  • 相关阅读:
    python simplejson and json 使用及区别
    python 网页抓取并保存图片
    word2vec剖析,资料整理备存
    centos 安装LAMP环境后装phpmyadmin
    centos 安装卸载软件命令 & yum安装LAMP环境
    Ubuntu终端快捷键使用
    Ubuntu终端文件的压缩和解压缩命令
    文本预处理去除标点符号
    朴素贝叶斯分类器的应用
    Win32环境下代码注入与API钩子的实现(转)
  • 原文地址:https://www.cnblogs.com/zxk5211/p/14036035.html
Copyright © 2011-2022 走看看