tcplayer播放实时视频流

tcplayer官方文档地址

新版
1、npm install tcplayer.js

建议使用版本 "tcplayer.js": "^4.8.0", 5.0的版本需要什么licensource
 <tcplayer v-if="i.videoStream" :enableFlag="true" :src="i.videoStream"></tcplayer>

以下是组件代码

<template>
    <div class="component-player">
        <div ref="video-outer" v-show="enableFlag" class="player-outer"></div>
        <el-image v-show="!enableFlag" src="/images/no-single.gif" fit="cover" />
        <div class="no-single" v-show="!enableFlag">
            <p>
                <strong>无法连接</strong>
                <span>connection failure</span>
            </p>
        </div>
    </div>

</template>
<script setup lang="ts">
import TCPlayer from 'tcplayer.js';
import 'tcplayer.js/dist/tcplayer.min.css';
import { reactive, watch, nextTick, getCurrentInstance, onBeforeUnmount } from "vue";
const { proxy } = getCurrentInstance();
const props = defineProps({
    enableFlag: Boolean,
    src:String,
});
const state = reactive({
    player: null,
});
watch(() => props.enableFlag, (n, o) => {
    if(n){
        nextTick(()=>initPlayer())
    }
    else{
        nextTick(()=>state.player && state.player.pause())
    }
}, { immediate: true })

onBeforeUnmount(() => {
    if(state.player) state.player.dispose();
})

function initPlayer(){
    if(state.player) state.player.dispose();
    let domId = `video${Math.floor(Math.random()*(99999-10000+1))+parseInt(10000)}`
    let dom = document.createElement('video')
    dom.setAttribute('class', 'video')
    dom.setAttribute('id', domId)
    dom.setAttribute('class', 'video')
    dom.setAttribute('id', domId)
    proxy.$refs['video-outer'].appendChild(dom)
    state.player = TCPlayer(domId, {
        sources: [{ src: props.src }],  //此处不用添加视频流类型,会自动识别视频流格式的
        // m3u8: props.src,
        autoplay: true, // 是否自动播放
        controls: true,
        live: false,
        muted: true,
        controlBar: {
            playbackRateMenuButton: true, //是否显示播放速率选择按钮。
            volumePanel: false,
            durationDisplay: false,
            currentTimeDisplay: false,
            timeDivider: false,
            //volumePanel: false,
            progressControl: false,
        },
        listener: function (msg) {
            console.log('error',msg)
            // 播放失败,重新连接
            // if (msg.type == "error") {
            //  setTimeout(() => {
            //      state.player.load(); // 重连
            //  }, 400);
            // }
        }
    });
    state.player.on('canplay', event=> {
        proxy.$emit('loadDone',false)
    })
}
</script>

<style lang="less" scoped>
.component-player{height: calc(100%); position: relative;  overflow: hidden;
    .el-image{width: 100%;height: 100%;
        img{width: 100%;height: 100%;}
    }
    
    .no-single{width: 100%;height: 100%; position: absolute; top: 0; left: 0; display: flex; align-items: center; justify-content: center; color: white; text-shadow: 0px 0px 5px #000; text-align: center;
        strong{ font-size: 18px; font-weight: 600;}
        span{display: block; font-size: 12px;}
    }
    .player-outer{position: relative; width: 100%; height: 100%; overflow: hidden;
        :deep(.video){ width:100% !important; height: 100% !important; }
    }
}
</style>

(旧版 不建议采用)
也可以全局引入 在index.html,全局引入文件我是放在public下面的。

 <link href="./js/release/tcplayer.min.css" rel="stylesheet"/>
  <script src="./js/release/tcplayer.v4.7.0.min.js"></script>

js依赖文件是在官网下载的tcplayer官网地址
代码实例, urlAddress是父组件传来的视频流地址,也有可用的网上找的视频流地址为注释的source。

样式的话需要在main.js引用下图的tcplayer.min.cssjs文件

<template>
    <div class="player">
        <div ref="videoOuter" class="video-player-page">
        </div>
    </div>

</template>
<script>
import  TcPlayer  from '../../assets/js/release/tcplayer.v4.7.0.min.js'

    export default {
        props: ['urlAddress'],
        data() {
            return {
                player: null,
               
            }
        },
        created() {},
        mounted() {
             this.initPlayer();
        },
        destroyed() {
            // 页面销毁,同时也销毁 TcPlayer
            this.player.dispose();
        },
        methods: {
            initPlayer() {
                let that=this;
                if(this.player){
                     this.player.dispose();
                }
                this.domId = `video${Math.floor(Math.random()*(99999-10000+1))+parseInt(10000)}`
                let dom = document.createElement('video')
                dom.setAttribute('class', 'video')
                dom.setAttribute('id', this.domId)
                this.$refs.videoOuter.appendChild(dom)
                this.player =  TcPlayer(this.domId, {
                    sources: [{ src: this.urlAddress, type: 'video/flv' }],
                    // sources: [{ src: 'https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv', type: 'video/flv' }],
                    autoplay: true, // 是否自动播放
                    controls: true,
                    muted: true,
                    controlBar: {
                        playbackRateMenuButton: false, //是否显示播放速率选择按钮。
                        volumePanel: false,
                        durationDisplay: false,
                        currentTimeDisplay: false,
                        timeDivider: false,
                        volumePanel: false,
                        progressControl: false,
                    },
                    listener: function (msg) {
                        // 播放失败,重新连接
                        // if (msg.type == "error") {
                        // 	setTimeout(() => {
                        // 		this.player.load(); // 重连
                        // 	}, 400);
                        // }
                    }
                });
                    // this.player.on('canplay', function(event) {
                    // // 从回调参数 event 中获取事件状态码及相关数据
                    // //    console.log(event)
                    // that.$emit('loadDone',false)
                    // // const emit=defineEmits(['loadDone'])
                 
                    // // emit('loadDone',false)
                    // });
            }
        }
    }
</script>
<style lang="less" scoped>
.vjs-tech{
     width:100% !important; height: 100% !important;
}
 .video-player-page{position: relative; width: 100%; height: 100%; overflow: hidden;
        /deep/.video{
                width:100% !important; height: 100% !important;
            }
    }
.player{height: calc((100vh - 350px)/3); position: relative; 
   
    img{width: 100%;height: 100%;}
    span{ position:absolute; top:50%; left: 50%;transform:translate(-50%,-50%); color: white;}
    .noneBox{
        display: flex;
        align-items:center;
        background: #07348a;
        color: #fff;
        line-height: 1em;
        text-align: center;
        position: absolute;
        top: 0;
        z-index: 2;
        width: 100%;
        height: 100%;
    }
    .called{
        z-index: 3;
    }
}

</style>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HTML网页播放实时视频流,一般通过使用WebRTC技术实现。WebRTC是一个基于HTML5的实时通信标准,其核心特性就包括了实时视频流传输的功能。WebRTC允许网页浏览器之间直接进行音视频通信,而无需通过服务器中转。这种技术优势在于能够实现较低的延迟和更高的可扩展性。 实现步骤如下:首先需要获取音视频媒体流,然后将媒体流发布到WebRTC网络中,向对方网页浏览器发送音视频流,对方网页浏览器接收音视频流并完成播放。在这个过程中,需要对音视频编码与解码、网络传输等进行处理。 总的来说,HTML网页播放实时视频流并不是单纯的HTML技术,而是涉及了较多的相关技术。如果想在自己的网站上实现播放实时视频流,建议参考相关的WebRTC技术文档,了解具体实现步骤。 ### 回答2: HTML网页可以通过使用video标签和媒体服务器来播放实时视频流。 首先,需要确保在HTML文档的头部导入正确的视频流媒体文件格式。例如,可以使用MP4、WebM或Ogg格式的视频流。在HTML代码中,可以使用以下代码添加视频播放器和视频流链接: ```html <video controls> <source src="your_video_stream_link" type="video/your_video_format"> Your browser does not support the video tag. </video> ``` 在以上代码中,video标签创建了一个视频播放器,并且通过source标签指定了视频流的链接和格式。通过设置controls属性,可以为视频播放器添加控制按钮,如播放、暂停和音量调节。 video/your_video_format应该替换为你实际使用的视频流格式(例如:video/mp4、video/webm或video/ogg)。your_video_stream_link应替换为实际视频流的URL地址。 另外,还可以使用JavaScript和一些库(如Video.js或HLS.js)来更好地控制视频播放器和处理实时视频流。这些库可以提供更多的功能和支持。 需要注意的是,视频流的稳定性和清晰度取决于媒体服务器和传输网络的性能。确保服务器能够稳定地提供实时视频流,并且网络连接足够稳定和高速。 综上所述,可以通过在HTML中使用video标签和正确的视频流链接来播放实时视频流,同时,使用JavaScript和库可以增强播放器的功能和支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值