WebRTC 音视频兼容问题汇总(二)

主要介绍了使用 WebRTC 进行实时通信过程中,音频流和视频流不显示、音视频无法播放等等方面的兼容性问题和解决方案。例如 IOS 15.x Safari 声音忽大忽小、IOS 音频播放无声、切后台音视频中断问题、IOS APP 嵌入 H5 视频播放问题等等。

5. IOS 15.x Safari 声音忽大忽小

问题描述:

(1)iphone 手机 ios15.X safari浏览器中实时音频流声音轻,忽大忽小;而播放视频声音很小

(2)订阅远端音频流声音响亮,但打开本地音频后,声音会立刻变得很轻(至少轻了2/3),之后再关闭本地音频也不会改善

(3)全程都戴耳机操作,音频也会变轻,但比不戴效果要好一点

问题解决:目前来看这个是系统的问题,只能等 IOS 后续的开级版本,看有没有解决该问题。

6. IOS 音频播放无声

问题描述:Safari 浏览器和谷歌浏览器中音频流;第一次开启声音,可以正常听到声音;关闭后再开启,就听不到声音了。

问题分析:Safari 因为音频隐私的原因不是直接自动播放,需要应用层手动交互触发才可以。

问题解决:关闭时,使用 mutedMicrophone 静音方法,而不是 closeMicrophone 关闭方法。关闭后,需要重新进行手动交互才行。

7. 切后台音视频中断问题

问题描述:

(1)IOS:会中切到后台去,音视频均断开了,音频播放完毕才断开,视频显示直接会黑屏;切回后正常显示播放

(2)Android:会中切到后台去,音视频均断开,但是视频画面会显示到最后一帧的画面;切回后正常显示播放

问题解决:监听 visibilitychange 方法,进行播放处理

iPhone 手机上,QQ 浏览器、搜狗浏览器、火狐浏览器等切换到后台再切回前台,或接听电话后,音视频控件的播放状态会变成暂停,通过监听进行处理

js 复制代码
document.addEventListener("visibilitychange", () => {
  if (document.hidden) {
    console.info("页面切到后台了~");
    //从后台切换到前台时就会触发
  } else {
    console.info("页面切回前台了");
    video.play();
    audio.play();
  }
});

8. IOS APP 嵌入 H5 视频播放问题

问题描述(一):只能放大全屏播放,放大后再缩小,视频流会卡住

问题解决(一):需要 APP 配置 allowsInlineMediaPlayback 属性

问题描述(二):远端视频流不显示问题

问题解决(一):第一次进入弹框,需要与用户进行交互之后,才能正常播放

9. 预览视频黑屏,无法显示

有些浏览器可以直接播放 mp4 文件,有些浏览器必须转为 blob 播放,需要进行灵活处理。

  1. 转为 blob:QQ浏览器(MQQBrowser)
  2. 直接赋值 src:百度浏览器(baiduboxapp)
  3. 以上两种均可:火狐(Firefox),谷歌(Chrome),vivo 自带浏览器(VivoBrowser),Safari浏览器
js 复制代码
// 直接通过url地址播放
const agent = navigator.userAgent;
if (agent.indexOf("baiduboxapp") > 0 || agent.indexOf("iPhone OS") > 0) {
  videoRef.current.src = url;
  return;
}

// 转成blob 进行播放
const xhr = new XMLHttpRequest();
xhr.open("get", url);
xhr.responseType = "blob";
xhr.send();
xhr.onload = function () {
  try {
    videoRef.current.src = URL.createObjectURL(xhr.response);
  } catch (e) {
    Toast.info("视频加载失败");
  }
};
相关推荐
一个不爱写代码的瘦子17 小时前
迭代器和生成器
前端·javascript
拳打南山敬老院17 小时前
漫谈 MCP 构建之概念篇
前端·后端·aigc
前端老鹰17 小时前
HTML <output> 标签:原生表单结果展示容器,自动关联输入值
前端·html
OpenTiny社区17 小时前
OpenTiny NEXT 内核新生:生成式UI × MCP,重塑前端交互新范式!
前端·开源·agent
耶耶耶11117 小时前
web服务代理用它,还不够吗?
前端
Liamhuo18 小时前
2.1.7 network-浏览器-前端浏览器数据存储
前端·浏览器
洋葱头_18 小时前
vue3项目不支持低版本的android,如何做兼容
前端·vue.js
前端小书生18 小时前
React 组件渲染
前端·react.js
sjd_积跬步至千里18 小时前
CSS实现文字横向无限滚动效果
前端
维他AD钙18 小时前
前端基础避坑:3 个实用知识点的简单用法
前端