首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI中的WebRTC VideoCall渲染

SwiftUI中的WebRTC VideoCall渲染
EN

Stack Overflow用户
提问于 2020-02-06 12:58:05
回答 2查看 1.5K关注 0票数 1

我正在使用webRTC在两台iphone设备之间进行视频通话。webrtc对等连接建立成功。视频流应该在swiftui中显示。保存视频的webRTC object RTCEAGLVideoView需要在swiftui中渲染。在模型类中,我将此对象声明为

代码语言:javascript
复制
var remoteVideoView : RTCEAGLVideoView?
    {
        willSet {
            objectWillChange.send()
        }
    }

在SwiftUI类中,应该呈现remoteVideoView。

代码语言:javascript
复制
VStack()
{
//show remoteVideoView  here
}

应该使用哪种对象来渲染此videoview。

enter image description here中的代码

EN

回答 2

Stack Overflow用户

发布于 2020-02-06 18:53:25

首先,您需要创建包含音频轨道和视频轨道的RTCMediaStream

代码语言:javascript
复制
@property RTCMediaStream * _Nullable mediaStream;

使用streamId从媒体服务器获取的流将其转换为RTCMediaStream,然后使用以下代码在RTCEAGLVideoView中呈现它

代码语言:javascript
复制
 if (mediaStream.videoTracks.count > 0) {
     RTCVideoTrack *videoTrack = [self.mediaStream.videoTracks objectAtIndex:0];
     [videoTrack addRenderer:remoteView];
   }

另外,创建RTCEAGLVideoView的IBOutlet,如下所示:

代码语言:javascript
复制
@property (weak, nonatomic) IBOutlet RTCEAGLVideoView *remoteView;

现在在视图控制器中添加一个视图,并将类作为RTCEAGLVideoView分配给该视图。接下来,连接videoView插座。

如果你没有使用故事板,请使用下面的代码:

代码语言:javascript
复制
 RTCEAGLVideoView *remoteView = [[RTCEAGLVideoView alloc] initWithFrame:self.frame]; // pass CGRect frame here.
 remoteView.delegate = self;
 [yourView addSubview:remoteView];

现在你可以看到你的视频了。

在下面的VStack()中添加RTCEAGLVideoView:

代码语言:javascript
复制
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中使用如下所示:

代码语言:javascript
复制
 VStack {
          RemoteView(frame)
      VStack{
           Text("")
           }
       }
票数 1
EN

Stack Overflow用户

发布于 2020-02-07 16:23:33

代码语言:javascript
复制
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结构中调用了它,

代码语言:javascript
复制
VStack()
{ 
      RemoteView() 
}

但是我得到了编译器错误

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60087973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档