[英]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.