当前位置:首页 > 行业动态 > 正文

安卓原生对接七牛云短视频sdk

安卓原生集成七牛云短视频SDK需配置权限、初始化SDK,调用接口实现视频上传与播放功能

前置准备

七牛云账号注册与配置

  • 注册账号:访问七牛云官网完成注册,创建主账号。
  • 创建空间(Bucket)
    • 进入「对象存储」->「空间管理」->「新建空间」。
    • 设置空间名称(如 shortvideo)、存储区域(如华东)、访问控制(建议私有空间)。
  • 获取密钥
    • 在「个人面板」->「密钥管理」中获取 AccessKeySecretKey

安卓项目配置

  • AndroidManifest.xml 中添加权限:
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.INTERNET"/>

SDK集成步骤

下载七牛云SDK

  • 访问七牛云开发者中心下载最新版 Android SDK(包含短视频模块)。
  • 解压后将 .jar.aar 文件放入项目 libs 目录。

配置Gradle依赖

// 项目根目录 build.gradle
allprojects {
    repositories {
        google()
        mavenCentral()
    }
}
// 模块级 build.gradle
dependencies {
    implementation fileTree(dir: 'libs', include: ['.jar']) // 引入本地SDK
    implementation 'com.qiniu:qiniu-android-sdk:7.9.0' // 七牛官方Maven库(可选)
}

初始化SDK

// Application类中初始化
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 初始化七牛云配置
        QNConfiguration config = new QNConfiguration();
        config.setAccessKey("你的AccessKey");
        config.setSecretKey("你的SecretKey");
        config.setBucketName("你的空间名");
        config.setZone(FixedZone.zone0()); // 根据空间所在区域选择
        QNService.init(this, config);
    }
}

核心功能实现

选择本地视频文件

// 调用系统文件选择器
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("video/");
startActivityForResult(intent, REQUEST_CODE_SELECT_VIDEO);

上传视频到七牛云

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_SELECT_VIDEO && resultCode == RESULT_OK) {
        Uri videoUri = data.getData();
        // 获取文件路径
        String filePath = FileUtils.getPath(this, videoUri);
        // 创建上传任务
        QNUploadTask task = new QNUploadTask(filePath, "短视频/" + System.currentTimeMillis() + ".mp4");
        task.setCallback(new QNUploadCallback() {
            @Override
            public void onProgress(double progress) {
                // 更新进度条
                progressBar.setProgress((int) (progress  100));
            }
            @Override
            public void onSuccess(String key, String hash) {
                // 上传成功后返回文件key和hash
                Toast.makeText(MainActivity.this, "上传成功,Key:" + key, Toast.LENGTH_LONG).show();
            }
            @Override
            public void onFailure(Exception exception) {
                // 处理失败逻辑
                Toast.makeText(MainActivity.this, "上传失败:" + exception.getMessage(), Toast.LENGTH_LONG).show();
            }
        });
        task.execute(); // 执行上传
    }
}

生成视频播放链接

// 根据返回的key生成公开访问链接
String publicUrl = QNService.getPublicUrl("短视频/" + fileKey);

关键配置参数表

参数项 说明 示例值
AccessKey 七牛云账户密钥 abcdefghijklmnopq
SecretKey 七牛云账户私钥 1234567890abcdef
BucketName 存储空间名称 shortvideo
FixedZone 存储区域(根据空间位置选择) zone0(华东)
RequestTimeout 网络请求超时时间(毫秒) 30000

常见问题与解决方案

上传失败提示权限不足

  • 原因:未在运行时动态申请存储权限。
  • 解决
    // Android 6.0+动态申请权限
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_PERMISSION);
    }

视频文件过大导致上传超时

  • 原因:默认分片大小或超时时间不足。
  • 解决
    • 调整分片大小:task.setBlockSize(1024 1024); // 1MB分片
    • 延长超时时间:QNConfiguration.setRequestTimeout(60000); // 60秒

相关问题与解答

问题1:如何限制上传视频的格式和大小?

解答

  • 格式限制:在文件选择后检查URI的MIME类型,仅允许 video/mp4 等格式。
  • 大小限制:在上传前获取文件大小,例如限制为50MB以内:
    long fileSize = new File(filePath).length();
    if (fileSize > 50  1024  1024) {
        Toast.makeText(this, "视频大小超过50MB限制", Toast.LENGTH_SHORT).show();
        return;
    }

问题2:如何实现视频封面图自动生成?

解答

  • 方案:利用FFmpeg生成视频截图,步骤如下:
    1. 集成FFmpeg库到项目中。
    2. 上传视频后调用命令截取第1秒画面:
      String coverPath = "/sdcard/cover.jpg";
      FFmpegCommandUtil.runCommand("-i " + videoPath + " -ss 1 -vframes 1 " + coverPath);
    3. 将封面图一并上传至七牛云,并与视频关联
0