Android - WebRTC : Video call live drawing

标签 android canvas drawing webrtc

我正在尝试在 Android(移动)应用程序上使用 WebRTC 制作一个简单的功能。 该应用程序现在可以进行简单的视频通话:将两个设备相互连接并让它们听到和看到。 我想要实现的是在通话期间进行一些现场绘图。简而言之:用户 1 调用用户 2,调用接通,然后用户 1 单击将卡住视频帧的绘制按钮并允许他在此卡住的帧上绘制。显然,用户 2 应该在他的手机上实时看到这幅画。 现在我可以卡住帧(通过调用 videoCapture.stopCapture())并使用自定义 SurfaceViewRenderer 在其上绘制。问题是 User2 看不到绘图,只能看到卡住的帧。

首先,我尝试创建一个新的视频轨道,其中包含绘图 Canvas 和用于绘制的卡住帧,但我没有成功。 使用 peerConnectionFactory.createVideoTrack("ARDAMSv1_"+ rand, videoSource); 创建视频轨道时 我应该指定轨道的视频源,但源只能是 VideoSource 并且此 VideoSource 只能使用直接链接到设备的 VideoCapturer 创建相机(当然没有任何绘图)。这就解释了为什么用户 2 在他的设备上看不到任何绘图。
我的问题是:如何创建一个 VideoCapturer,它可以流式传输相机流(卡住帧)和带有绘图的 Canvas ?

所以我尝试将自己的 VideoCapturer 实现为:
1) 捕获一个 View (例如包含绘图和卡住帧的布局)并将其流式传输到 VideoSource
或者 2) 捕获相机 View ,但在流式传输之前将绘图添加到帧中。
我无法完成这些工作,因为我不知道如何操作 I420Frame 对象以在其上绘制并通过正确的回调返回它。

也许我对这种方法完全错误,需要做一些完全不同的事情,我愿意接受任何建议。 PS:我正在使用 Android API 25 和 WebRTC 1.0.19742。我不想使用任何付费的第三方 SDK/lib。

有谁知道如何继续实现从一个 Android 应用程序到另一个 Android 应用程序的简单 WebRTC 实时绘图?

最佳答案

几周前我们又回到了那个功能,我设法找到了一个方法。

我扩展了我自己的 CameraCapturer 类,以便在渲染之前控制相机帧。然后我创建了自己的 CanvasView 以便能够在上面绘图。

从那里我所做的是将两个位图合并在一起(相机 View + 我的 Canvas 和绘图),然后我在缓冲区上用 OpenGL 绘制它并将它显示在 SurfaceView 上。

如果有人感兴趣,我可以发布一些代码。

关于Android - WebRTC : Video call live drawing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49895547/

相关文章:

android - 在首选项行中添加一个按钮

javascript - 从命令行将第三方网站的 HTML Canvas 捕获为图像

ios - UIImage drawInRect

python - 使用 PIL 的 Imagedraw 创建具有给定厚度的圆弧

xcode - 为什么使用自动布局时按钮无法正确绘制?

java - Android Studio 配置损坏

安卓 : maps from intent

java - Android Log类中的d方法

java - 在 JavaFX 中为大量图形元素设置动画的最快方法

javascript - 如何准确缩放已经翻译的d3 map