Reactjs 如果未启用视频曲目,则将mediastream.clone()添加到视频元素srcObject不会触发loadedmetadata事件

Reactjs 如果未启用视频曲目,则将mediastream.clone()添加到视频元素srcObject不会触发loadedmetadata事件,reactjs,audio,video,mediastream,Reactjs,Audio,Video,Mediastream,我已将react应用程序配置为: //landingpage.js const{mediaStream,setMediaStream}=useContext(StreamContext); useffect(()=>{ navigator.mediaDevices.getUserMedia({video:true,audio:true}) 。然后((流)=>{ const video=document.querySelector('video'); video.srcObject=流; vide

我已将react应用程序配置为:

//landingpage.js
const{mediaStream,setMediaStream}=useContext(StreamContext);
useffect(()=>{
navigator.mediaDevices.getUserMedia({video:true,audio:true})
。然后((流)=>{
const video=document.querySelector('video');
video.srcObject=流;
video.onloadedmetadata=()=>{
video.play();
setMediaStream(stream.clone());
}
}).在这里接住。。。;
}, []);
常量切换视频=()=>{
...
const video=document.querySelector('video');
const stream=video.src对象;
tracks.forEach((track)=>{
如果(track.kind==='video'){
track.enabled=!track.enabled;
setMediaStream(stream.clone());
}
});
...
}
//toggleAudio也是一样
登录页似乎工作正常,onloadedmetadata事件被触发,视频播放带有音频。但是,当我获取stream.clone()并转到另一个页面,然后将srcObject添加到其中的视频元素时,会发生奇怪的行为:

//已重定向到新页面newpage.js
const{mediaStream,setMediaStream}=useContext(StreamContext);
useffect(()=>{
if(媒体流){
const video=document.querySelector('video');
video.srcObject=mediaStream;
video.onloadedmetadata=()=>{
//如果未启用视频曲目,则不会捕获此事件
//我还确认,如果启用了视频跟踪,则此块将运行
//我尝试过使用“loadedmetadata”和“loadeddata”替换video.addEventListener,但它对我不起作用
video.play();
};
}
}, [])
在这个页面中,如果我为视频曲目设置了enabled false,那么音频不会自动播放,没有音频,即使曲目没有静音。如果videotrack启用为true,则音频和视频工作。以下是媒体流曲目的外观:

MediaStreamTrack
内容提示:“
已启用:true
身份证:。。。
种类:“音频”
标签:。。。
静音:错误
onended:null
onmute:null
onoverconstrated:null
onunmute:null
readyState:“现场”
MediaStreamTrack
内容提示:“
已启用:false
身份证:。。。
种类:“视频”
标签:。。。
静音:错误
onended:null
onmute:null
onoverconstrated:null
onunmute:null
readyState:“现场”
我希望克隆可以无缝地在新页面中自动播放,但是,如果关闭视频,它似乎不会自动播放音频

我注意到的是,如果未启用视频曲目,则在新页面中不会触发
onloadedmetadata
事件


这个问题似乎在Safari中出现,但在Chrome和Firefox中没有出现。

您是否检查了
react hooks/deps
lint warning?这看起来像是依赖项错误。@gnujoow是的,我的eslintrc规则中有
“react hooks/deps”:“warn”
。有什么具体的东西我应该看看吗?