mobile: call settings, request camera on iOS on call start (#701)

* mobile: call settings, request camera on iOS on call start

* refactor preferences

* fix typo
This commit is contained in:
Evgeny Poberezkin
2022-05-27 16:36:33 +01:00
committed by GitHub
parent 79d9e90ab7
commit da13e6614b
28 changed files with 686 additions and 513 deletions
+13 -5
View File
@@ -53,6 +53,7 @@ interface IWCallResponse {
interface WCCapabilities extends IWCallCommand {
type: "capabilities"
media?: CallMediaType
useWorker?: boolean
}
@@ -289,8 +290,7 @@ const processCommand = (function () {
const pc = new RTCPeerConnection(config.peerConnectionConfig)
const remoteStream = new MediaStream()
const localCamera = VideoCamera.User
const constraints = callMediaConstraints(mediaType, localCamera)
const localStream = await navigator.mediaDevices.getUserMedia(constraints)
const localStream = await getLocalMediaStream(mediaType, localCamera)
const iceCandidates = getIceCandidates(pc, config)
const call = {connection: pc, iceCandidates, localMedia: mediaType, localCamera, localStream, remoteStream, aesKey, useWorker}
await setupMediaStreams(call)
@@ -352,11 +352,15 @@ const processCommand = (function () {
try {
switch (command.type) {
case "capabilities":
console.log("starting outgoing call - capabilities")
if (activeCall) endCall()
// This request for local media stream is made to prompt for camera/mic permissions on call start
if (command.media) await getLocalMediaStream(command.media, VideoCamera.User)
const encryption = supportsInsertableStreams(command.useWorker)
resp = {type: "capabilities", capabilities: {encryption}}
break
case "start": {
console.log("starting call")
console.log("starting incoming call - create webrtc session")
if (activeCall) endCall()
const {media, useWorker, iceServers, relay} = command
const encryption = supportsInsertableStreams(useWorker)
@@ -582,8 +586,7 @@ const processCommand = (function () {
const pc = call.connection
for (const t of call.localStream.getTracks()) t.stop()
call.localCamera = camera
const constraints = callMediaConstraints(call.localMedia, camera)
const localStream = await navigator.mediaDevices.getUserMedia(constraints)
const localStream = await getLocalMediaStream(call.localMedia, camera)
replaceTracks(pc, localStream.getVideoTracks())
replaceTracks(pc, localStream.getAudioTracks())
call.localStream = localStream
@@ -621,6 +624,11 @@ const processCommand = (function () {
}
}
function getLocalMediaStream(mediaType: CallMediaType, facingMode: VideoCamera): Promise<MediaStream> {
const constraints = callMediaConstraints(mediaType, facingMode)
return navigator.mediaDevices.getUserMedia(constraints)
}
function callMediaConstraints(mediaType: CallMediaType, facingMode: VideoCamera): MediaStreamConstraints {
switch (mediaType) {
case CallMediaType.Audio: