如果我将音频设置为 true,则 Safari for Iphone 和 Ipad self video 会冻结

Posted

技术标签:

【中文标题】如果我将音频设置为 true,则 Safari for Iphone 和 Ipad self video 会冻结【英文标题】:Safari for Iphone and Ipad self video get frozen if I set audio to true 【发布时间】:2019-04-16 17:23:23 【问题描述】:

我已经使用 webrtc api 和 jQuery javascript 进行了应用程序视频聊天,但我在 iPhone 和 iPad 上的 Safari 中遇到了问题,当我接收到远程视频时,自己的视频会被冻结,这只有在我将音频设置为 true 时才会发生在我的设置中,

 var constraint = 
        video: 
            minWidth: 270,
            minHeight: 270,
            minFrameRate: 25,
            maxWidth: 270,
            maxHeight: 270,
            maxFrameRate: 25,
            facingMode: 'user'
        ,
        audio: false
    

有人可以帮我吗

【问题讨论】:

也许这有帮助:webkit.org/blog/6784/new-video-policies-for-iosiOS WebKit 政策 【参考方案1】:

我能够成功解决问题,我将音频流和视频流分开,克隆了我的全局流并以不同的方式处理两者,这是帮助我做到这一点的代码,我希望这对某人有所帮助。

function makeAudioOnlyStreamFromExistingStream(stream) 
  var audioStream = stream.clone();
  var videoTracks = audioStream.getVideoTracks();
  for (var i = 0, len = videoTracks.length; i < len; i++) 
    audioStream.removeTrack(videoTracks[i]);
  
  console.log('created audio only stream, original stream tracks: ', stream.getTracks());
  console.log('created audio only stream, new stream tracks: ', audioStream.getTracks());
  return audioStream;


function makeVideoOnlyStreamFromExistingStream(stream) 
  var videoStream = stream.clone();
  var audioTracks = videoStream.getAudioTracks();
  for (var i = 0, len = audioTracks.length; i < len; i++) 
    videoStream.removeTrack(audioTracks[i]);
  
  console.log('created video only stream, original stream tracks: ', stream.getTracks());
  console.log('created video only stream, new stream tracks: ', videoStream.getTracks());
  return videoStream;

function handleSuccess(stream) 
  var audioOnlyStream = makeAudioOnlyStreamFromExistingStream(stream);
  var videoOnlyStream = makeVideoOnlyStreamFromExistingStream(stream);
  // Do stuff with all the streams...

function handleError(error) 
  console.error('getUserMedia() error: ', error);

var constraints = 
  audio: true,
  video: true,
;
navigator.mediaDevices.getUserMedia(constraints).
    then(handleSuccess).catch(handleError);

完整的例子在这里

https://webrtchacks.com/guide-to-safari-webrtc/

【讨论】:

以上是关于如果我将音频设置为 true,则 Safari for Iphone 和 Ipad self video 会冻结的主要内容,如果未能解决你的问题,请参考以下文章

cublasGemmEx 结果始终为零

在 iOS 13 safari/chrome 浏览器中播放音频 (mp3) 的延迟

在 iOS Safari 中播放音频时如何设置缩略图?

如果查询为true,则禁用字段

如果不将 Transpose 设置为 GL_TRUE,OpenGL/GSL 将无法工作

如果会话设置为 true,则打开一个 div