我正在尝试在Android(移动)应用上使用WebRTC制作一个简单的功能。该应用程序现在可以进行简单的视频通话:将两个设备彼此连接起来,让他们听到和看到。我想要实现的是在通话过程中进行一些现场绘画。简单地说:User1呼叫User2,呼叫建立连接,然后User1单击绘制按钮,该按钮将冻结视频帧并允许他在此冻结的帧上进行绘制。显然,User2应该可以在他的手机上实时看到该绘图。现在,我可以冻结帧(通过调用videoCapture.stopCapture())并使用自定义SurfaceViewRenderer在其上进行绘制。问题在于User2仅在冻结的框架中看不到图形。
首先,我尝试创建一个新的视频轨道,其中包含绘图画布和要绘画的冻结帧,但是我无法成功。使用peerConnectionFactory.createVideoTrack("ARDAMSv1_" + rand, videoSource);
创建视频轨时我应该指定轨道的视频源,但是源只能是VideoSource
,并且只能使用直接链接到设备摄像机的VideoCapturer
创建此VideoSource(当然,上面没有任何图形) 。这解释了为什么User2在其设备上看不到任何图形。我的问题是:如何创建一个VideoCapturer,它可以流传输摄像机流(冻结的帧)和带有绘图的画布?
所以我尝试将自己的VideoCapturer实现为:1)捕获一个View(例如包含图形和冻结帧的布局)并将其流式传输给VideoSource或2)捕获摄像机视图,但在流传输之前将其添加到帧中。我无法完成任何工作,因为我不知道如何操纵I420Frame对象以在其上绘制并通过正确的回调将其返回。
也许我完全不赞成这种方法,需要做一些完全不同的事情,我愿意接受任何建议。PS:我将Android API 25与WebRTC 1.0.19742结合使用。我不想使用任何付费的第三方SDK / lib。
没有人知道如何从一个Android应用程序转换为另一个Android应用程序的简单WebRTC实时绘图吗?
您需要做的是获得stream to canvas。然后有绘图应用程序在画布上进行编辑,我看一个William Malone项目。 (如果要导入图片,请先透明!)
kaput ...