FUAgoraOpenLiveDemoDroid 是集成了 FaceUnity 面部跟踪和虚拟道具功能 和 声网视频直播 的 Demo。
本 demo 使用 Agora SDK 的新接口 IVideoSource
,详细说明请阅读声网的开发文档
注意:本 demo 支持切换相机
本文是 FaceUnity SDK 快速对 声网视频直播 的导读说明,关于 FaceUnity SDK
的详细说明,请参看 FULiveDemoDroid
将 faceunity 模块依赖到工程中,demo 使用的是 FaceUnity Nama 5.9 版本。
在 FURenderer类 的 initFURenderer
静态方法是对 FaceUnity SDK 一些全局数据初始化的封装,可以在 Application 中调用,仅需初始化一次即可。
public static void initFURenderer(Context context);
FaceUnity 的接入代码在 io.agora.fu 包下面,请作为参考。
在 FURenderer类 的 onSurfaceCreated
方法是对 FaceUnity SDK 每次使用前数据初始化的封装。
在 FURenderer类 的 onDrawFrame
方法是对 FaceUnity SDK 图像处理方法的封装,该方法有许多重载方法适用于不同的数据类型需求。
在 FURenderer类 的 onSurfaceDestroyed
方法是对 FaceUnity SDK 数据销毁的封装。
在切换前后相机时,调用 FURenderer 类的 onCameraChange
方法。
本 demo 是基于声网自采集的摄像头数据 demo 做的集成,使用时可以参考下面的代码,在 LiveRoomActivity 类中。
// IVideoSource 实现类,自己采集视频,并用 FaceUnity SDK 处理
mFuTextureCamera = new FuTextureCamera(this, 1280, 720);
mFuTextureCamera.setOnCaptureListener(new FuTextureCamera.OnCaptureListener() {
// 绘制每帧时,通过 FURenderer 处理
@Override
public int onTextureBufferAvailable(int textureId, byte[] buffer, int width, int height) {
return mFURenderer.onDrawFrame(buffer, textureId, width, height);
}
// 画面创建
@Override
public void onCapturerStarted() {
Log.d(TAG, "onCapturerStarted() called");
mFURenderer.onSurfaceCreated();
}
// 画面销毁
@Override
public void onCapturerStopped() {
Log.d(TAG, "onCapturerStopped() called");
mFURenderer.onSurfaceDestroyed();
}
// 相机切换
@Override
public void onCameraSwitched(int facing, int orientation) {
Log.d(TAG, "onCameraSwitched() called with: facing = [" + facing + "], orientation = [" + orientation + "]");
mFURenderer.onCameraChange(facing, orientation);
}
});
// 设置视频源
rtcEngine().setVideoSource(mFuTextureCamera);
// 切换相机时调用
mFuTextureCamera.switchCameraFacing();
显示画面使用声网提供的 AgoraSurfaceView 就可以,下面是初始化渲染器的代码。
AgoraSurfaceView agoraSurfaceView = new AgoraSurfaceView(this);
agoraSurfaceView.init(mFuTextureCamera.getEglContext());
agoraSurfaceView.setBufferType(MediaIO.BufferType.TEXTURE);
agoraSurfaceView.setPixelFormat(MediaIO.PixelFormat.TEXTURE_2D);
agoraSurfaceView.setZOrderOnTop(true);
agoraSurfaceView.setZOrderMediaOverlay(true);
rtcEngine().setLocalVideoRenderer(agoraSurfaceView);
下面几个生命周期方法,主要是在应用处于前台、后台、销毁后的相应操作。
@Override
protected void onResume() {
super.onResume();
if (mFuTextureCamera != null) {
mFuTextureCamera.onResume();
}
}
@Override
protected void onPause() {
super.onPause();
if (mFuTextureCamera != null) {
mFuTextureCamera.onPause();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mFuTextureCamera != null) {
mFuTextureCamera.release();
}
}
本例中 FURenderer类 实现了 OnFUControlListener接口,而OnFUControlListener接口是对切换道具及调整美颜参数等一系列操作的封装,demo中使用了BeautyControlView作为切换道具及调整美颜参数的控制view。使用以下代码便可实现view对各种参数的控制。
mBeautyControlView.setOnFUControlListener(mFURenderer);
快速集成完毕,关于 FaceUnity SDK 的更多详细说明,请参看 FULiveDemoDroid
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。