整理一下flv.js的使用

1,317 阅读1分钟

项目使用flv.js从后端获取摄像头的数据来实现实时播放视频。

let mediaDataSource = { "type": "flv", "isLive": true, "withCredentials": false, "hasAudio": false, "hasVideo": true, "url": camera.mediaurl }
this.flv_load_mds(mediaDataSource)

这里是定义使用flv.js的参数,"url": camera.mediaurl是后端视频的地址.

flv_load_mds(mediaDataSource) {        
let element = document.querySelector('#'+this.props.videoId);        
let me = this;        
me.time = new Date()/1000        
this.setState({            isshowgif:true        })        
// console.log(element)        
if (typeof me.player !== "undefined") {            
if (me.player != null) {                
me.player.unload();                
me.player.detachMediaElement();               
me.player.destroy();                
me.player = null;            }        }        
me.player = window.flvjs.createPlayer(mediaDataSource, {            enableWorker: false,            lazyLoadMaxDuration: 3 * 60,            seekType: 'range',        });
 me.player.attachMediaElement(element);        me.player.onvCanplay = function(e){            console.log(e)        }        me.player.on('error',function(error){            // me.time = new Date()/1000            // console.log(new Date()/1000 - me.time)            console.log(error,me.player)            if(error==='NetworkError' || error === "MediaError"){                me.player.unload();                me.player.detachMediaElement();                // setTimeout(function(){                //     me.player.attachMediaElement(element);                //     me.player.load();                //     me.player.play();                // },30*1000)            }                })        me.timer = setTimeout(() => {            me.player.unload();            me.player.detachMediaElement();            if( this.state.camera && this.state.camera.mediaurl){                let body = {                    "session_id": window.session_id*1,                    list:[this.state.camera]                };                if(this.state.camera.mediaurl.indexOf('RelVideo') >= 0){                    fetch(url + '/Video/CancelVideo', {                        method:"POST",                        headers:{"token":window.token,                        "Content-Type":"application/json"                        },                        body:JSON.stringify(body)                    });                }else{                    this.state.camera.schedule_time = '';                    fetch(url + '/Video/ControlVideoPlayBack', {                        method:"POST",                        headers:{"token":window.token,                        "Content-Type":"application/json"                        },                        body:JSON.stringify(body)                    });                }            }            me.setState({                isshowgif:false,                isrestart:true            })            clearTimeout(me.timer)        }, 40*1000);            try{            me.player.load();            me.player.play();                    }catch(err){            console.log('from try',err)        }         }

这里是具体使用的过程,里面的定时器主要用做在40s后取消播放;element获取播放视频的video标签,然后将视频播放到这个video标签里面。

me.player.unload();me.player.detachMediaElement();me.player.destroy();me.player = null;

退出播放时做的处理。