3

大家好。我正在尝试在我录制的视频的角落添加一个小徽标。我尝试将 imageView 直接添加到记录表面,但这不是解决方案。

我想我必须创建另一个表面并将它们合并在一起,但我找不到任何教程或代码示例。

我找到了添加前景可绘制的选项,但它没有在预览表面上显示徽标。这是代码:

   private void startRecording(){
    try {
        setupMediaRecorder();
        mTextureView.setForeground(getDrawable(R.drawable.toolbarlogo));
        SurfaceTexture surfaceTexture = mTextureView.getSurfaceTexture();
        surfaceTexture.setDefaultBufferSize(mPreviewSize.getWidth(),mPreviewSize.getHeight());

        Surface previewSurfice = new Surface(surfaceTexture);
        Surface recordSurface = mMediaRecorder.getSurface();

        mPreviewCaptureRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
        mPreviewCaptureRequestBuilder.addTarget(previewSurfice);
        mPreviewCaptureRequestBuilder.addTarget(recordSurface);

        mCameraDevice.createCaptureSession(Arrays.asList(previewSurfice, recordSurface), new CameraCaptureSession.StateCallback() {
            @Override
            public void onConfigured(@NonNull CameraCaptureSession session) {
                try {
                    session.setRepeatingRequest(
                            mPreviewCaptureRequestBuilder.build(),null,null
                    );
                } catch (CameraAccessException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onConfigureFailed(@NonNull CameraCaptureSession session) {

            }
        },null);



    } catch (Exception e) {
        e.printStackTrace();
    }
}

请帮忙。谢谢

4

1 回答 1

1

添加单独的表面只会在您在应用程序中查看徽标时显示徽标 - 如果您希望将徽标添加到文件中以便在共享或加载视频时可以查看,那么您需要将其添加到视频本身。

假设您将视频捕获到本地设备,那么您可以这样做的一种方法是使用 ffmpeg 将图像添加到视频中 - 请参阅此答案,其中包括有关如何定位图像的注释:

有几种方法可以将 ffmpeg 包含在 Android 项目中,但可能最简单的方法是使用一个受到良好支持的 ffmpeg 包装器项目,例如:

包装器基本上围绕命令行 ffmpeg 工具包装了一个接口,它的优点是您可以使用相同的语法 - 例如上面提到的答案中的语法,并利用它周围的网络上的支持和问答。

缺点是命令行工具最初不是为这种方式设计的,但是如果您使用支持良好的包装器,您可能会发现很多问题都已解决。

需要注意的一件事 - 视频处理具有相当高的 CPU,因此对移动设备的电池要求很高。如果您要将视频上传到服务器以进行共享,则在此处添加图像可能更有意义,因为您有更多的 CPU 马力。

于 2017-09-04T11:12:56.820 回答