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("视频加载失败");
  }
};
相关推荐
st紫月16 分钟前
用vue和go实现登录加密
前端·vue.js·golang
岁岁岁平安26 分钟前
Vue3学习(组合式API——计算属性computed详解)
前端·javascript·vue.js·学习·computed·计算属性
up·1 小时前
react+html-docx-js将页面导出为docx
react.js
HWL56791 小时前
Express项目解决跨域问题
前端·后端·中间件·node.js·express
刺客-Andy1 小时前
React 第三十九节 React Router 中的 unstable_usePrompt Hook的详细用法及案例
前端·javascript·react.js
Go_going_1 小时前
【js基础笔记] - 包含es6 类的使用
前端·javascript·笔记
浩~~2 小时前
HTML5 浮动(Float)详解
前端·html·html5
AI大模型顾潇3 小时前
[特殊字符] 本地大模型编程实战(29):用大语言模型LLM查询图数据库NEO4J(2)
前端·数据库·人工智能·语言模型·自然语言处理·prompt·neo4j
九月TTS3 小时前
TTS-Web-Vue系列:Vue3实现内嵌iframe文档显示功能
前端·javascript·vue.js
爱编程的小学究3 小时前
【node】如何把包发布到npm上
前端·npm·node.js