簡體   English   中英

SwiftUI 中的 WebRTC VideoCall 渲染

[英]WebRTC VideoCall Rendering in SwiftUI

我正在使用 webRTC 在兩個 iPhone 設備之間進行視頻通話。 webrtc 對等連接建立成功。 視頻流應顯示在 swiftui 中。 保存視頻的 webRTC 對象 RTCEAGLVideoView 需要在 swiftui 中呈現。 在模型類中,我將此對象聲明為

var remoteVideoView : RTCEAGLVideoView?
    {
        willSet {
            objectWillChange.send()
        }
    }

在 SwiftUI 類中,應該呈現 remoteVideoView。

VStack()
{
//show remoteVideoView  here
}

應該使用什么樣的對象來呈現這個視頻視圖。

簡短的代碼在此處輸入圖像描述

首先,您需要創建包含音軌和視頻軌道的RTCMediaStream

@property RTCMediaStream * _Nullable mediaStream;

您從帶有 streamId 的媒體服務器獲取的流將它們轉換為RTCMediaStream ,然后使用以下代碼在RTCEAGLVideoView呈現它

 if (mediaStream.videoTracks.count > 0) {
     RTCVideoTrack *videoTrack = [self.mediaStream.videoTracks objectAtIndex:0];
     [videoTrack addRenderer:remoteView];
   }

還要創建一個 RTCEAGLVideoView 的 IBOutlet,如下所示:

@property (weak, nonatomic) IBOutlet RTCEAGLVideoView *remoteView;

現在在您的視圖控制器中添加一個視圖並將類作為RTCEAGLVideoView分配給該視圖。 接下來連接 videoView 插座。

如果您不使用故事板,請使用以下代碼:

 RTCEAGLVideoView *remoteView = [[RTCEAGLVideoView alloc] initWithFrame:self.frame]; // pass CGRect frame here.
 remoteView.delegate = self;
 [yourView addSubview:remoteView];

現在你可以看到你的視頻了。

在 VStack() 中添加 RTCEAGLVideoView 使用如下:

struct RemoteView: UIViewRepresentable {
    func remoteView(context: Context) -> RTCEAGLVideoView {
        //create frame for RTCEAGLVideoView here
    }
}


struct RemoteView_Preview: PreviewProvider {
    static var previews: some View {
        RemoteView(frame: .zero)
    }
}

在 VStack 中使用如:

 VStack {
          RemoteView(frame)
      VStack{
           Text("")
           }
       }
struct RemoteView : UIViewRepresentable {
    @Binding var video: VideoCall
    @Binding var remoteView: RTCEAGLVideoView
    func updateUIView(_ uiView: RTCEAGLVideoView, context: UIViewRepresentableContext<RemoteView>) {
   }

    func makeUIView(context: Context) -> RTCEAGLVideoView  {
        self.remoteView.frame = CGRect(x: 20, y: 20, width: 200, height: 300)
        self.remoteView = self.video.remoteVideoView!
        return self.remoteView
    }

} 

我從另一個 swiftui 結構中將其稱為

VStack()
{ 
      RemoteView() 
}

但我收到編譯器錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM