Ramble-FE / services / platform / adapter.native.ts
adapter.native.ts
Raw
import { mediaDevices, MediaStream, RTCIceCandidate, RTCPeerConnection, RTCSessionDescription } from "react-native-webrtc";
import { IPlatformWebRTC } from "./adapter.inteerfce";

export class PlatformAdapter implements IPlatformWebRTC {

    createPeerConnection(config: RTCConfiguration) {
        return new RTCPeerConnection(config);
    }

    createSessionDescription(init: RTCSessionDescriptionInit) {
        return new RTCSessionDescription(init as any);
    }

    createIceCandidate(init: RTCIceCandidateInit) {
        return new RTCIceCandidate(init);
    }
    
    async getUserMedia(): Promise<any> {
        return mediaDevices.getUserMedia({
            audio: true,
            video: {
                width: { min: 360, ideal: 540, max: 960 },
                height: { min: 480, ideal: 720, max: 1280 },
                frameRate: { ideal: 30, max: 30 },
                facingMode: 'user',
            },
        });
    }

    async switchCamera(mediaStream: MediaStream): Promise<boolean> {
        if (!mediaStream) return false;

        const videoTrack = mediaStream.getVideoTracks()[0];
        if (!videoTrack) return false;

        try {
            await (videoTrack as any)._switchCamera();
            return true;
        } catch (error) {
            console.error("[PlatformAdapter] 카메라 전환 실패: ", error);
            return false;
        }
    }

}