中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

SDKForAndroid快速接入的方法是什么

這篇文章主要介紹“SDK For Android快速接入的方法是什么”,在日常操作中,相信很多人在SDK For Android快速接入的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SDK For Android快速接入的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比仙居網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式仙居網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋仙居地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。

正文

由于三個版本接入方式大同小異,本文將著重介紹基礎(chǔ)版接入過程,標準版和專業(yè)版可以基于基礎(chǔ)版方式接入,后續(xù)僅說明接入差異的地方。

基礎(chǔ)版接入

1. 引入 aar 以及 so

目前 aar 平臺版本最低要求 >= 4.3,先從SDK 下載頁面下載相應(yīng)版本的 SDK,解壓之后,將 libs 文件夾下的 QuSdk-RC.aar 拷到 Android 工程模塊中的 libs 文件夾下,將 jniLibs 文件夾下的 armeabi-v7a 文件夾也整體拷貝到 libs 文件夾下。
拷貝完成之后目錄的文件如下:
SDK For Android快速接入的方法是什么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

請根據(jù)具體的項目情況選擇合適的 SDK 初始化時機,Demo 工程在 Applicatioin 的 onCreate() 方法中初始化。

package me.bogerchan.alishortvideodemo

import android.app.Application
import 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. 開始書寫你的業(yè)務(wù)邏輯

經(jīng)過上述過程,實際上已經(jīng)接入完成,這時候你可以參考文檔直接開始使用各種 API 了,附下示例代碼。

package me.bogerchan.alishortvideodemo

import android.Manifest
import android.app.Activity
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.support.v4.app.ActivityCompat
import android.support.v7.app.AppCompatActivity
import android.widget.Toast
import com.aliyun.demo.recorder.AliyunVideoRecorder
import com.aliyun.struct.common.VideoQuality
import com.aliyun.struct.snap.AliyunSnapVideoParam
import me.bogerchan.alishortvideodemo.basic.R


class 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

標準版相較于基礎(chǔ)版,在引入 so 文件時候多了幾個文件,同時 aar 文件名有所變動。最終拷貝結(jié)果如下:
SDK For Android快速接入的方法是什么 build.gradle 文件修改與基礎(chǔ)版接入一樣,只是需要將接入 aar 文件名替換成標準版對應(yīng)的名字。

2. 初始化 SDK

相較于基礎(chǔ)版,需要加載的 so 增多了幾個,其中部分 so 文件作為可選功能根據(jù)實際情況決定是否加載,具體可以參閱阿里云短視頻 SDK 文檔。接入后的 Application 文件參考:

package me.bogerchan.alishortvideodemo

import android.app.Application
import 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. 開始書寫你的業(yè)務(wù)邏輯

經(jīng)過上述過程,實際上已經(jīng)接入完成,這時候你可以參考文檔直接開始使用各種 API 了,附下示例代碼。

package me.bogerchan.alishortvideodemo

import android.Manifest
import android.content.pm.PackageManager
import android.opengl.GLSurfaceView
import android.os.Bundle
import android.support.v4.app.ActivityCompat
import android.support.v7.app.AppCompatActivity
import android.widget.Toast
import com.aliyun.recorder.AliyunRecorderCreator
import com.aliyun.struct.recorder.CameraType
import com.aliyun.struct.recorder.MediaInfo
import me.bogerchan.alishortvideodemo.std.R


class MainActivity : AppCompatActivity() {

    companion object {
        val REQUEST_CODE_FOR_PERMISSION = 1
    }

    private val 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, "結(jié)束錄制", 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<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        when (requestCode) {
            REQUEST_CODE_FOR_PERMISSION -> {
                grantResults.forEach {
                    if (it == PackageManager.PERMISSION_DENIED) {
                        Toast.makeText(this, "沒有權(quán)限,不玩了", Toast.LENGTH_SHORT).show()
                        finish()
                        return@forEach
                    }
                }
            }

        }
    }
}

專業(yè)版接入

1. 引入 aar 以及 so

專業(yè)版相較于基礎(chǔ)版,在引入 so 文件時候多了幾個文件,同時 aar 文件名有所變動。

build.gradle 文件修改與基礎(chǔ)版接入一樣,只是需要將接入 aar 文件名替換成專業(yè)版對應(yīng)的名字。

2. 初始化 SDK

相較于基礎(chǔ)版,需要加載的 so 增多了幾個,其中部分 so 文件作為可選功能根據(jù)實際情況決定是否加載,具體可以參閱阿里云短視頻 SDK 文檔。接入后的 Application 文件參考:

package me.bogerchan.alishortvideodemo

import android.app.Application
import 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. 開始書寫你的業(yè)務(wù)邏輯

經(jīng)過上述過程,實際上已經(jīng)接入完成,這時候你可以參考文檔直接開始使用各種 API 了,附下示例代碼。

package me.bogerchan.alishortvideodemo

import android.Manifest
import android.content.pm.PackageManager
import android.opengl.GLSurfaceView
import android.os.Bundle
import android.support.v4.app.ActivityCompat
import android.support.v7.app.AppCompatActivity
import android.widget.Toast
import com.aliyun.recorder.AliyunRecorderCreator
import com.aliyun.struct.recorder.CameraType
import com.aliyun.struct.recorder.MediaInfo
import me.bogerchan.alishortvideodemo.pro.R


class MainActivity : AppCompatActivity() {

    companion object {
        val REQUEST_CODE_FOR_PERMISSION = 1
    }

    private val 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, "結(jié)束錄制", 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<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        when (requestCode) {
            REQUEST_CODE_FOR_PERMISSION -> {
                grantResults.forEach {
                    if (it == PackageManager.PERMISSION_DENIED) {
                        Toast.makeText(this, "沒有權(quán)限,不玩了", Toast.LENGTH_SHORT).show()
                        finish()
                        return@forEach
                    }
                }
            }

        }
    }
}

到此,關(guān)于“SDK For Android快速接入的方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

當(dāng)前題目:SDKForAndroid快速接入的方法是什么
標題路徑:http://m.rwnh.cn/article22/jippcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、云服務(wù)器、搜索引擎優(yōu)化外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站營銷、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)
台安县| 杂多县| 鹿泉市| 广水市| 大余县| 正宁县| 鹤峰县| 惠来县| 蒲江县| 巢湖市| 高雄市| 邵东县| 井冈山市| 浪卡子县| 威信县| 大足县| 西平县| 巴马| 九寨沟县| 奉化市| 锡林郭勒盟| 子洲县| 连山| 望奎县| 常熟市| 泰兴市| 商城县| 集安市| 灵武市| 晋中市| 涟水县| 南汇区| 宜兰市| 布尔津县| 桦川县| 中阳县| 海安县| 乐安县| 余庆县| 驻马店市| 湟中县|