【m】禁用视频功能接入
This commit is contained in:
@@ -234,39 +234,80 @@ class UIRenderer {
|
||||
// 渲染远程视频流
|
||||
renderRemoteStream(stream) {
|
||||
if (this.elements.remoteVideo && stream) {
|
||||
this.elements.remoteVideo.srcObject = stream;
|
||||
this.elements.remoteVideo.autoplay = true;
|
||||
console.log('Rendering remote stream:', stream);
|
||||
|
||||
// 关键设置:启用硬件加速和最佳质量渲染
|
||||
this.elements.remoteVideo.style.transform = 'translateZ(0)'; // 启用硬件加速
|
||||
this.elements.remoteVideo.style.imageRendering = 'pixelated'; // 保持像素清晰
|
||||
this.elements.remoteVideo.style.objectFit = 'contain'; // 保持比例
|
||||
console.log('Remote stream set successfully:', this.elements.remoteVideo.srcObject);
|
||||
// 即使流对象相同,也要重新设置,确保视频元素能够识别轨道变化
|
||||
this.elements.remoteVideo.srcObject = null;
|
||||
|
||||
// 隐藏断开连接覆盖层
|
||||
if (this.elements.disconnectedOverlay) {
|
||||
this.elements.disconnectedOverlay.classList.add('hidden');
|
||||
}
|
||||
// 延迟设置srcObject,确保视频元素能够正确处理
|
||||
setTimeout(() => {
|
||||
this.elements.remoteVideo.srcObject = stream;
|
||||
console.log('Remote stream reset successfully:', stream);
|
||||
|
||||
// 隐藏占位背景
|
||||
if (this.elements.remoteVideoPlaceholder) {
|
||||
this.elements.remoteVideoPlaceholder.classList.add('hidden');
|
||||
}
|
||||
// 获取视频轨道并处理分辨率
|
||||
const videoTracks = stream.getVideoTracks();
|
||||
if (videoTracks.length > 0) {
|
||||
const resolution = this.getVideoResolution(videoTracks[0]);
|
||||
this.adjustVideoSize(this.elements.remoteVideo, resolution);
|
||||
// 确保视频元素的属性正确设置
|
||||
this.elements.remoteVideo.autoplay = true;
|
||||
this.elements.remoteVideo.playsinline = true;
|
||||
this.elements.remoteVideo.muted = true;
|
||||
|
||||
// 监听轨道变化,处理分辨率调整
|
||||
videoTracks[0].addEventListener('resize', () => {
|
||||
const newResolution = this.getVideoResolution(videoTracks[0]);
|
||||
this.adjustVideoSize(this.elements.remoteVideo, newResolution);
|
||||
// 关键设置:启用硬件加速和最佳质量渲染
|
||||
this.elements.remoteVideo.style.transform = 'translateZ(0)'; // 启用硬件加速
|
||||
this.elements.remoteVideo.style.imageRendering = 'pixelated'; // 保持像素清晰
|
||||
this.elements.remoteVideo.style.objectFit = 'contain'; // 保持比例
|
||||
|
||||
// 隐藏断开连接覆盖层
|
||||
if (this.elements.disconnectedOverlay) {
|
||||
this.elements.disconnectedOverlay.classList.add('hidden');
|
||||
}
|
||||
|
||||
// 隐藏占位背景
|
||||
if (this.elements.remoteVideoPlaceholder) {
|
||||
this.elements.remoteVideoPlaceholder.classList.add('hidden');
|
||||
}
|
||||
|
||||
// 获取视频轨道并处理分辨率
|
||||
const videoTracks = stream.getVideoTracks();
|
||||
console.log('Remote video tracks:', videoTracks);
|
||||
|
||||
// 检查是否有有效的视频轨道
|
||||
const hasValidVideoTrack = videoTracks.length > 0 && videoTracks.some(track => {
|
||||
// 检查轨道是否已停止或被禁用
|
||||
return track.readyState === 'live';
|
||||
});
|
||||
}
|
||||
|
||||
console.log('Has valid video track:', hasValidVideoTrack);
|
||||
|
||||
if (hasValidVideoTrack) {
|
||||
console.log('Found valid video tracks, updating resolution');
|
||||
const activeVideoTrack = videoTracks.find(track => track.readyState === 'live');
|
||||
if (activeVideoTrack) {
|
||||
const resolution = this.getVideoResolution(activeVideoTrack);
|
||||
this.adjustVideoSize(this.elements.remoteVideo, resolution);
|
||||
|
||||
// 监听轨道变化,处理分辨率调整
|
||||
activeVideoTrack.addEventListener('resize', () => {
|
||||
const newResolution = this.getVideoResolution(activeVideoTrack);
|
||||
this.adjustVideoSize(this.elements.remoteVideo, newResolution);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
console.log('No valid video tracks in remote stream');
|
||||
// 清空视频元素的源
|
||||
this.elements.remoteVideo.srcObject = null;
|
||||
|
||||
// 显示占位背景
|
||||
if (this.elements.remoteVideoPlaceholder) {
|
||||
this.elements.remoteVideoPlaceholder.classList.remove('hidden');
|
||||
}
|
||||
}
|
||||
}, 50); // 增加延迟时间,确保视频元素有足够的时间处理
|
||||
} else {
|
||||
console.error('Either remoteVideo element or stream is missing');
|
||||
|
||||
// 清空视频元素的源
|
||||
if (this.elements.remoteVideo) {
|
||||
this.elements.remoteVideo.srcObject = null;
|
||||
}
|
||||
|
||||
// 显示占位背景
|
||||
if (this.elements.remoteVideoPlaceholder) {
|
||||
this.elements.remoteVideoPlaceholder.classList.remove('hidden');
|
||||
|
||||
Reference in New Issue
Block a user