千家信息网

SDK For Android快速接入的方法是什么

发表于:2025-01-29 作者:千家信息网编辑
千家信息网最后更新 2025年01月29日,这篇文章主要介绍"SDK For Android快速接入的方法是什么",在日常操作中,相信很多人在SDK For Android快速接入的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
千家信息网最后更新 2025年01月29日SDK For Android快速接入的方法是什么

这篇文章主要介绍"SDK For Android快速接入的方法是什么",在日常操作中,相信很多人在SDK For Android快速接入的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"SDK For Android快速接入的方法是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

正文

由于三个版本接入方式大同小异,本文将着重介绍基础版接入过程,标准版和专业版可以基于基础版方式接入,后续仅说明接入差异的地方。

基础版接入

1. 引入 aar 以及 so

目前 aar 平台版本最低要求 >= 4.3,先从SDK 下载页面下载相应版本的 SDK,解压之后,将 libs 文件夹下的 QuSdk-RC.aar 拷到 Android 工程模块中的 libs 文件夹下,将 jniLibs 文件夹下的 armeabi-v7a 文件夹也整体拷贝到 libs 文件夹下。
拷贝完成之后目录的文件如下:
cdn.com/a3c99cdf2c604e073dabbb2aa90a1f05294c1fed.png">

之后按照如下方式修改 Android 项目工程主模块下的 build.gradle 文件:

Step1. 修改 jniLibs 的源文件夹;

android {       sourceSets.main {        jniLibs.srcDir "libs"    }}

Step2. 将 libs 文件夹加入仓库中;

repositories {    flatDir {        dirs 'libs'    }}

Step3. 增加 aar 所需依赖。

dependencies {    implementation(name: 'QuSdk-RC', ext: 'aar')    implementation 'com.android.support:appcompat-v7:24.2.1'    implementation 'com.android.support:design:24.2.1'    implementation 'com.google.code.findbugs:jsr305:3.0.0'    implementation 'com.github.bumptech.glide:glide:3.7.0'    implementation 'pub.devrel:easypermissions:0.2.1'    implementation 'com.squareup.okhttp3:okhttp:3.2.0'    implementation 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'    implementation 'com.squareup.okio:okio:1.12.0'    implementation 'com.google.code.gson:gson:2.8.0' }

如果此处遭遇 java.lang.NoSuchFieldError 错误,可以参考短视频安卓常见问题解决。

2. 初始化 SDK

请根据具体的项目情况选择合适的 SDK 初始化时机,Demo 工程在 Applicatioin 的 onCreate() 方法中初始化。

package me.bogerchan.alishortvideodemoimport android.app.Applicationimport com.aliyun.common.httpfinal.QupaiHttpFinal/** * Created by hb.chen on 2018/1/6. */class MyApplication : Application() {    override fun onCreate() {        super.onCreate()        System.loadLibrary("QuCore-ThirdParty")        System.loadLibrary("QuCore")        QupaiHttpFinal.getInstance().initOkHttpFinal()    }}
3. 开始书写你的业务逻辑

经过上述过程,实际上已经接入完成,这时候你可以参考文档直接开始使用各种 API 了,附下示例代码。

package me.bogerchan.alishortvideodemoimport android.Manifestimport android.app.Activityimport android.content.Intentimport android.content.pm.PackageManagerimport android.os.Bundleimport android.support.v4.app.ActivityCompatimport android.support.v7.app.AppCompatActivityimport android.widget.Toastimport com.aliyun.demo.recorder.AliyunVideoRecorderimport com.aliyun.struct.common.VideoQualityimport com.aliyun.struct.snap.AliyunSnapVideoParamimport me.bogerchan.alishortvideodemo.basic.Rclass MainActivity : AppCompatActivity() {    companion object {        val REQUEST_CODE_RECORD_VIDEO = 1        val REQUEST_CODE_FOR_PERMISSION = 2    }    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        findViewById(R.id.btn_start_record).setOnClickListener {            startRecordActivity()        }        ActivityCompat.requestPermissions(this,                arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE,                        Manifest.permission.READ_EXTERNAL_STORAGE,                        Manifest.permission.CAMERA,                        Manifest.permission.RECORD_AUDIO),                REQUEST_CODE_FOR_PERMISSION)    }    private fun startRecordActivity() {        val recordParam = AliyunSnapVideoParam.Builder()                .setResolutionMode(AliyunSnapVideoParam.RESOLUTION_720P)                .setRatioMode(AliyunSnapVideoParam.RATIO_MODE_9_16)                .setRecordMode(AliyunSnapVideoParam.RECORD_MODE_AUTO)                .setNeedClip(true)                .setMaxDuration(10000)                .setMinDuration(2000)                .setVideQuality(VideoQuality.HD)                .setSortMode(AliyunSnapVideoParam.SORT_MODE_MERGE)                .build()        AliyunVideoRecorder.startRecordForResult(this, REQUEST_CODE_RECORD_VIDEO, recordParam)    }    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {        super.onActivityResult(requestCode, resultCode, data)        when (requestCode) {            REQUEST_CODE_RECORD_VIDEO -> {                if (resultCode == Activity.RESULT_OK && data != null) {                    val type = data.getIntExtra(AliyunVideoRecorder.RESULT_TYPE, 0)                    if (type == AliyunVideoRecorder.RESULT_TYPE_CROP) {                        Toast.makeText(this, "类型为裁剪", Toast.LENGTH_SHORT).show()                    } else if (type == AliyunVideoRecorder.RESULT_TYPE_RECORD) {                        Toast.makeText(this, "文件路径为 ">

标准版接入

1. 引入 aar 以及 so

标准版相较于基础版,在引入 so 文件时候多了几个文件,同时 aar 文件名有所变动。最终拷贝结果如下:
build.gradle 文件修改与基础版接入一样,只是需要将接入 aar 文件名替换成标准版对应的名字。

2. 初始化 SDK

相较于基础版,需要加载的 so 增多了几个,其中部分 so 文件作为可选功能根据实际情况决定是否加载,具体可以参阅阿里云短视频 SDK 文档。接入后的 Application 文件参考:

package me.bogerchan.alishortvideodemoimport android.app.Applicationimport com.aliyun.common.httpfinal.QupaiHttpFinal/** * Created by hb.chen on 2018/1/6. */class MyApplication : Application() {    override fun onCreate() {        super.onCreate()        System.loadLibrary("aliresample")        System.loadLibrary("live-openh364")        System.loadLibrary("QuCore-ThirdParty")        System.loadLibrary("QuCore")        QupaiHttpFinal.getInstance().initOkHttpFinal()    }}
3. 开始书写你的业务逻辑

经过上述过程,实际上已经接入完成,这时候你可以参考文档直接开始使用各种 API 了,附下示例代码。

package me.bogerchan.alishortvideodemoimport android.Manifestimport android.content.pm.PackageManagerimport android.opengl.GLSurfaceViewimport android.os.Bundleimport android.support.v4.app.ActivityCompatimport android.support.v7.app.AppCompatActivityimport android.widget.Toastimport com.aliyun.recorder.AliyunRecorderCreatorimport com.aliyun.struct.recorder.CameraTypeimport com.aliyun.struct.recorder.MediaInfoimport me.bogerchan.alishortvideodemo.std.Rclass MainActivity : AppCompatActivity() {    companion object {        val REQUEST_CODE_FOR_PERMISSION = 1    }    privateval mRecorder by lazy {        AliyunRecorderCreator.getRecorderInstance(this)    }    private var mCameraType = CameraType.FRONT    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        ActivityCompat.requestPermissions(this,                arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE,                        Manifest.permission.READ_EXTERNAL_STORAGE,                        Manifest.permission.CAMERA,                        Manifest.permission.RECORD_AUDIO),                REQUEST_CODE_FOR_PERMISSION)        initAliyunRecorder()        findViewById(R.id.btn_start_record).setOnClickListener {            Toast.makeText(this, "开始录制片段", Toast.LENGTH_SHORT).show()            mRecorder.startRecording()        }        findViewById(R.id.btn_stop_record).setOnClickListener {            Toast.makeText(this, "停止录制片段", Toast.LENGTH_SHORT).show()            mRecorder.stopRecording()        }        findViewById(R.id.btn_finish_record).setOnClickListener {            Toast.makeText(this, "结束录制", Toast.LENGTH_SHORT).show()            mRecorder.finishRecording()        }        findViewById(R.id.btn_change_camera_type).setOnClickListener {            Toast.makeText(this, "切换前后置", Toast.LENGTH_SHORT).show()            mRecorder.switchCamera()        }    }    override fun onStart() {        super.onStart()        mRecorder.startPreview()    }    override fun onPause() {        super.onPause()        mRecorder.stopPreview()    }    override fun onDestroy() {        super.onDestroy()        AliyunRecorderCreator.destroyRecorderInstance()    }    private fun initAliyunRecorder() {        mRecorder.setDisplayView(findViewById(R.id.glsv_content) as GLSurfaceView)        val mediaInfo = MediaInfo()        mediaInfo.videoWidth = 800        mediaInfo.videoHeight = 1200        mediaInfo.isHWAutoSize = true        mRecorder.setMediaInfo(mediaInfo)        mRecorder.setCamera(mCameraType)        mRecorder.setOutputPath(externalCacheDir.absolutePath + "/capture.mp4")    }    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults)        when (requestCode) {            REQUEST_CODE_FOR_PERMISSION -> {                grantResults.forEach {                    if (it == PackageManager.PERMISSION_DENIED) {                        Toast.makeText(this, "没有权限,不玩了", Toast.LENGTH_SHORT).show()                        finish()                        return@forEach                    }                }            }        }    }}

专业版接入

1. 引入 aar 以及 so

专业版相较于基础版,在引入 so 文件时候多了几个文件,同时 aar 文件名有所变动。

build.gradle 文件修改与基础版接入一样,只是需要将接入 aar 文件名替换成专业版对应的名字。

2. 初始化 SDK

相较于基础版,需要加载的 so 增多了几个,其中部分 so 文件作为可选功能根据实际情况决定是否加载,具体可以参阅阿里云短视频 SDK 文档。接入后的 Application 文件参考:

package me.bogerchan.alishortvideodemoimport android.app.Applicationimport com.aliyun.common.httpfinal.QupaiHttpFinal/** * Created by hb.chen on 2018/1/6. */class MyApplication : Application() {    override fun onCreate() {        super.onCreate()        System.loadLibrary("live-openh364")        System.loadLibrary("QuCore-ThirdParty")        System.loadLibrary("QuCore")        System.loadLibrary("FaceAREngine")        System.loadLibrary("AliFaceAREngine")        QupaiHttpFinal.getInstance().initOkHttpFinal()    }}
3. 开始书写你的业务逻辑

经过上述过程,实际上已经接入完成,这时候你可以参考文档直接开始使用各种 API 了,附下示例代码。

package me.bogerchan.alishortvideodemoimport android.Manifestimport android.content.pm.PackageManagerimport android.opengl.GLSurfaceViewimport android.os.Bundleimport android.support.v4.app.ActivityCompatimport android.support.v7.app.AppCompatActivityimport android.widget.Toastimport com.aliyun.recorder.AliyunRecorderCreatorimport com.aliyun.struct.recorder.CameraTypeimport com.aliyun.struct.recorder.MediaInfoimport me.bogerchan.alishortvideodemo.pro.Rclass MainActivity : AppCompatActivity() {    companion object {        val REQUEST_CODE_FOR_PERMISSION = 1    }    privateval mRecorder by lazy {        AliyunRecorderCreator.getRecorderInstance(this)    }    private var mCameraType = CameraType.FRONT    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        ActivityCompat.requestPermissions(this,                arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE,                        Manifest.permission.READ_EXTERNAL_STORAGE,                        Manifest.permission.CAMERA,                        Manifest.permission.RECORD_AUDIO),                REQUEST_CODE_FOR_PERMISSION)        initAliyunRecorder()        findViewById(R.id.btn_start_record).setOnClickListener {            Toast.makeText(this, "开始录制片段", Toast.LENGTH_SHORT).show()            mRecorder.startRecording()        }        findViewById(R.id.btn_stop_record).setOnClickListener {            Toast.makeText(this, "停止录制片段", Toast.LENGTH_SHORT).show()            mRecorder.stopRecording()        }        findViewById(R.id.btn_finish_record).setOnClickListener {            Toast.makeText(this, "结束录制", Toast.LENGTH_SHORT).show()            mRecorder.finishRecording()        }        findViewById(R.id.btn_change_camera_type).setOnClickListener {            Toast.makeText(this, "切换前后置", Toast.LENGTH_SHORT).show()            mRecorder.switchCamera()        }    }    override fun onStart() {        super.onStart()        mRecorder.startPreview()    }    override fun onPause() {        super.onPause()        mRecorder.stopPreview()    }    override fun onDestroy() {        super.onDestroy()        AliyunRecorderCreator.destroyRecorderInstance()    }    private fun initAliyunRecorder() {        mRecorder.setDisplayView(findViewById(R.id.glsv_content) as GLSurfaceView)        val mediaInfo = MediaInfo()        mediaInfo.videoWidth = 800        mediaInfo.videoHeight = 1200        mediaInfo.isHWAutoSize = true        mRecorder.setMediaInfo(mediaInfo)        mRecorder.setCamera(mCameraType)        mRecorder.needFaceTrackInternal(true)        mRecorder.setOutputPath(externalCacheDir.absolutePath + "/capture.mp4")    }    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults)        when (requestCode) {            REQUEST_CODE_FOR_PERMISSION -> {                grantResults.forEach {                    if (it == PackageManager.PERMISSION_DENIED) {                        Toast.makeText(this, "没有权限,不玩了", Toast.LENGTH_SHORT).show()                        finish()                        return@forEach                    }                }            }        }    }}

到此,关于"SDK For Android快速接入的方法是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0