这是在pjsip中完成的。将 repo 拉到你的机器上:
svn checkout -r 4687 https://svn.pjsip.org/repos/pjproject/trunk
然后打开pjmedia/src/swig
一个示例应用程序的文件夹,该应用程序将从线路传入的视频数据直接呈现到SurfaceTexture
.
我已经为你上传了两个最相关的 C 源文件(一目了然——当然还有其他的),在这里:
- android_dev.c
- android_opengl.c
当然,这些文件包含许多与您无关的代码,但希望有您正在寻找的代码片段。
如果您不确定如何执行此操作,您可能需要首先按照此处找到的一些说明生成处理极简 Java/C 接口的文件。pjmedia/src/pjmedia-videodev/android/PjCamera*.java
我能够按照他们的说明使用与 NDK(使用 10d 或 10e 的版本)和 openssl (1.0.2a) 完全相同的版本,并成功渲染视频并创建自定义应用程序。如果您只是修改 C 级视频捕获以通过 JNI 挂钩以与他们相同的方式使用您的 API,那么此源代码完全可以完成您正在寻找的内容。
有关使用 JNI 挂钩更改 API 的示例,请查看他们在 pjmedia 中的 audiodev 文件夹。
如果您确实构建了他们的项目,请务必按照最底部的说明进行构建,以获取较新的 NDK 版本openssl 1.0.2a
。请注意 ./Configure 上的大写“C”,因为执行标准 ./configure 可能会启动错误的配置过程。我建议将他们提供的命令复制并粘贴到脚本中。您可能可以完全跳过 openssl 以达到您的目的;只有在集成了 openssl 支持后,我才能让我的 Android 设备一致地注册 SIP 帐户。