相关疑难解决方法(0)

MediaRecorder 和 VideoSource.SURFACE,停止失败:-1007(一个严重的 Android 错误)

我正在尝试MediaRecorder不使用Camera实例而是使用Surface视频源进行录制(是的,这是可能的,但事实证明它并不完美)-mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);

我只写什么问题:

下一个代码仅适用于某些设备,并在最近的设备重新启动后在某些设备上临时工作或根本不起作用

如果它不起作用 okMediaRecorder.stop()方法失败并出现下一个错误

E/MediaRecorder:停止失败:-1007 W/System.err:

java.lang.RuntimeException:停止失败。在

android.media.MediaRecorder.stop(本机方法)

录音机 mp4 文件太小(千字节),无法播放

测试设备:

适用于联想 P2、小米 A1

不适用于小米红米 5、索尼 Xperia、小米红米 4 Prime

您也可以阅读我的代码中的注释以更好地理解问题

new Thread(() -> {

    MediaRecorder mediaRecorder = new MediaRecorder();

    File file = new File(Environment.getExternalStorageDirectory()
            + File.separator + "test_media_recorder_surface_source.mp4");
    if (file.exists()) {
        file.delete();
    }

    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mediaRecorder.setOutputFile(file.getAbsolutePath());
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mediaRecorder.setVideoSize(1280, 720);
    mediaRecorder.setCaptureRate(24);

    try {
        mediaRecorder.prepare();

        int sleepTime = 1000 / 24;

        Surface surface = mediaRecorder.getSurface();

        mediaRecorder.start();

        // record something (we can …
Run Code Online (Sandbox Code Playgroud)

android surface android-canvas mediarecorder android-mediarecorder

8
推荐指数
1
解决办法
3648
查看次数

如何在android中录制视频的同时在视频上绘图,并保存视频和绘图?

我正在尝试开发一款应用程序,允许我在录制视频时在视频上绘图,然后将录制内容和视频保存在一个 mp4 文件中以供以后使用。另外,我想使用camera2库,特别是我需要我的应用程序在高于API 21的设备上运行,并且我总是避免使用已弃用的库。

我尝试了很多方法来做到这一点,包括在 FFmpeg 中放置了 TextureView.getBitmap() (来自相机)的叠加层和从画布中获取的位图。它可以工作,但由于它是一个缓慢的功能,视频无法捕获足够的帧(甚至没有 25 fps),而且运行速度非常快。我希望也包括音频。

我考虑过 MediaProjection 库,但我不确定它是否可以捕获包含相机的布局和仅在其 VirtualDisplay 内的绘图,因为应用程序用户也可以在视频上添加文本,而且我不想要键盘出现。

请帮助,已经进行了一周的研究,但我发现没有什么对我有用的。

PS:如果用户按下“停止录制”按钮后包含一点处理时间,我不会有问题。

编辑:

现在,在 Eddy 的回答之后,我正在使用 Shadercam 应用程序在相机表面上绘图,因为该应用程序执行视频渲染,而要做的解决方法是将我的画布渲染为位图,然后渲染为 GL 纹理,但是我无法成功地做到这一点。我需要你们的帮助,我需要完成应用程序:S

我正在使用shadercam库(https://github.com/googlecreativelab/shadercam),并用以下代码替换了“ExampleRenderer”文件:

public class WriteDrawRenderer extends CameraRenderer
{
    private float offsetR = 1f;
    private float offsetG = 1f;
    private float offsetB = 1f;

    private float touchX = 1000000000;
    private float touchY = 1000000000;

    private  Bitmap textBitmap;

    private int textureId;

    private boolean isFirstTime = true;

    //creates a new canvas that will draw into a …
Run Code Online (Sandbox Code Playgroud)

java android drawing opengl-es-2.0 camera2

5
推荐指数
1
解决办法
4678
查看次数