HarmonyOS 鸿蒙Next WebRTC: 鸿蒙折叠屏Fold自带浏览器使用WebRTC采集画面,当屏幕竖切横屏时,横屏看到的画面依然是竖屏角度,同时通过peerconnection传输给远端的画面依旧是竖屏方向。
HarmonyOS 鸿蒙Next WebRTC: 鸿蒙折叠屏Fold自带浏览器使用WebRTC采集画面,当屏幕竖切横屏时,横屏看到的画面依然是竖屏角度,同时通过peerconnection传输给远端的画面依旧是竖屏方向。
问题:
华为metabook fold 折叠屏设备横竖屏切换横屏时,浏览器下使用WebRTC API采集到的流都是竖屏状态流(看到的画面是颠倒的竖屏角度),没有自适应处理,可以基于下方的代码或者链接体验测试。
可以使用安卓/ios浏览器下的表现对比测试效果,可以自适应旋转流方向。
有类似问题,但是官方回复的不适用于推送出去的画面流,远端参会者看到的画面方向和角度依旧不对。并且这个明显是鸿蒙浏览器的问题,不应该让每个开发者自行去适配这个问题。
使用WebRTC采集摄像头流:
const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
官方示例程序测试:
https://webrtc.github.io/samples/src/content/getusermedia/gum/
原型代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
<div>
<input type="button" title="HTML5摄像头" value="开启摄像头" onclick="getMedia()" />
</div>
<div>
<video id="video" width="400px" height="400px" autoplay="autoplay"></video>
</div>
<script>
async function getMedia() {
const video = document.getElementById("video");
const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
video.srcObject = stream;
await video.play();
}
</script>
</body>
</html>
测试截图(没有权限上传视频):使用metabool fold折叠屏和安卓与ios对比测试效果:
同样对比,使用meta x5折叠手机和鸿蒙直板手机均没有问题。
相似问题,官方回复过这个问题,但是是让开发者处理本地画面回显,画面流依旧是竖屏角度,远端看到的仍然有问题,这个回答不太合理,也不应该是开发者自行来适配。
https://developer.huawei.com/consumer/cn/forum/topic/0204182017816685938?fid=0109140870620153026
更多关于HarmonyOS 鸿蒙Next WebRTC: 鸿蒙折叠屏Fold自带浏览器使用WebRTC采集画面,当屏幕竖切横屏时,横屏看到的画面依然是竖屏角度,同时通过peerconnection传输给远端的画面依旧是竖屏方向。的实战教程也可以访问 https://www.itying.com/category-93-b0.html
鸿蒙Next WebRTC在折叠屏设备上存在屏幕旋转适配问题。当设备从竖屏切换至横屏时,浏览器未正确触发WebRTC视频轨道的onorientationchange事件,导致视频采集方向未更新。底层原因在于鸿蒙的屏幕旋转事件未与WebRTC的媒体管道同步,当前视频轨道仍保持初始竖屏的旋转矩阵参数。远端收到的视频流metadata中rotation字段仍为90度(竖屏模式),而非0度(横屏模式)。此问题需鸿蒙方在WebRTC HAL层实现屏幕旋转事件的动态响应机制。
更多关于HarmonyOS 鸿蒙Next WebRTC: 鸿蒙折叠屏Fold自带浏览器使用WebRTC采集画面,当屏幕竖切横屏时,横屏看到的画面依然是竖屏角度,同时通过peerconnection传输给远端的画面依旧是竖屏方向。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个已知的HarmonyOS Next浏览器在折叠屏设备上的WebRTC方向适配问题。当前版本中,浏览器未正确处理设备旋转时的视频流方向元数据,导致本地预览和远端传输都保持竖屏方向。
建议的临时解决方案:
- 监听设备方向变化事件:
window.addEventListener('orientationchange', handleOrientationChange);
- 在事件回调中重新获取媒体流并应用旋转:
function handleOrientationChange() {
const video = document.getElementById('video');
const stream = video.srcObject;
const tracks = stream.getVideoTracks();
tracks.forEach(track => {
const settings = track.getSettings();
// 根据当前方向调整约束
const constraints = {
width: settings.height,
height: settings.width,
facingMode: settings.facingMode
};
track.applyConstraints(constraints);
});
}
这个问题确实应该由系统浏览器层自动处理,我们已将该问题反馈给HarmonyOS浏览器团队,预计在后续版本中会修复此方向适配问题。建议关注HarmonyOS的版本更新日志。