uni-app 原生插件 支持安卓与苹果视频录制 并加水印

发布于 1周前 作者 gougou168 来自 Uni-App

uni-app 原生插件 支持安卓与苹果视频录制 并加水印

5 回复

可以做,专业插件开发,联系QQ:1196097915


承接双端(Android,iOS)原生插件开发,uni-app开发,出售各类型源码。欢迎咨询
QQ:1559653449 V X:fan-rising

可以做,联系QQ:1804945430

https://ext.dcloud.net.cn/plugin?id=5848 包含自定义相机 自定义相册 https://ext.dcloud.net.cn/plugin?id=5941 这个在上面基础上增加了图片 视频压缩 https://ext.dcloud.net.cn/plugin?id=6183 这个还包含图片、视频编辑 我们的摄像头相关插件,技术、经验上完全没有问题,可以沟通看下 专业团队为您服务,我们的价格不是最低的,但是我们的插件质量、服务的可持续性肯定是没有问题的 如有需要可以进QQ群755910061沟通(QQ:57570616是商务,技术都在群里,直接跟对应的技术沟通更方便) 智密科技拥有全职前端、安卓、IOS、后端开发工程师,UI设计师,从前端到原生一条龙解决各类Uniapp疑难杂症,专业提供Uniapp原生插件,承接各类APP定制开发(开发完成后提供源码),与我们合作意味着您为项目开发找了一个专业团队作为后盾,所有的项目都有长期的售后支持 公司已经把相机和相册插件尽可能的做到自定义,避免定制提供用户的使用成本,也有支持图片 视频编辑 压缩的插件; 腾讯IM、直播、实时音视频插件都已经商品化,提供完善的DEMO和文档,免费提供IM源码(Uniapp开发的前端源码,插件不开源) 定制各类硬件及硬件SDK,已开发大量打印机插件、RFID插件、支付类插件、播放器插件、直播美颜插件…您需要的我们都有

uni-app 中实现原生插件支持安卓与苹果视频录制并加水印的功能,可以通过编写原生插件来完成。以下是一个简化的代码示例,展示了如何在安卓和iOS平台上实现这一功能。

安卓端实现

首先,在 native-plugins 目录下创建一个名为 VideoRecorder 的插件目录,并编写相应的 Java 代码。

VideoRecorder.java

package com.example.videorecorder;

import android.Manifest;
import android.content.pm.PackageManager;
import android.media.MediaRecorder;
import android.os.Environment;
import android.widget.Toast;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;
import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class VideoRecorder extends UniModule {
    private MediaRecorder recorder;
    private String outputFile;

    @UniJSMethod(uiThread = false)
    public void startRecording(UniJSCallback callback) {
        // 请求权限、初始化MediaRecorder、开始录制等逻辑
        // ...
        outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recorded_video_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()) + ".mp4";
        recorder.setOutputFile(outputFile);
        recorder.prepare();
        recorder.start();
        callback.invoke("Recording started");
    }

    @UniJSMethod(uiThread = false)
    public void stopRecording(UniJSCallback callback) {
        recorder.stop();
        recorder.reset();
        addWatermark(outputFile, new File(outputFile.replace(".mp4", "_watermarked.mp4")), callback);
    }

    private void addWatermark(String inputPath, File outputFile, UniJSCallback callback) {
        // 使用FFmpeg等工具添加水印的逻辑
        // ...
        callback.invoke("Recording stopped and watermarked: " + outputFile.getAbsolutePath());
    }
}

iOS端实现

native-plugins 目录下创建一个对应的 iOS 插件目录,并编写 Objective-C 或 Swift 代码。

VideoRecorder.m

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

@interface VideoRecorder : NSObject

- (void)startRecording:(void (^)(NSString *))callback;
- (void)stopRecording:(void (^)(NSString *))callback;

@end

@implementation VideoRecorder

// 初始化AVCaptureSession、AVCaptureVideoDataOutput等
// ...

- (void)startRecording:(void (^)(NSString *))callback {
    // 开始录制的逻辑
    // ...
}

- (void)stopRecording:(void (^)(NSString *))callback {
    // 停止录制并添加水印的逻辑
    // 使用AVAssetExportSession导出视频,使用AVMutableVideoCompositionLayerInstruction添加水印
    // ...
    callback([NSString stringWithFormat:@"Recording stopped and watermarked: %@", outputFilePath]);
}

@end

注意事项

  1. 权限处理:在安卓端需要处理存储权限和录音权限。
  2. FFmpeg集成:在安卓端添加水印可以使用FFmpeg库,需要集成FFmpeg并编写相应的命令。
  3. UI线程:注意在UI线程中更新UI,非UI线程处理耗时操作。
  4. 错误处理:添加必要的错误处理逻辑,确保插件的健壮性。

以上代码仅为示例,实际开发中需要根据具体需求进行调整和完善。

回到顶部