日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

集成微短劇方案-Android

本文介紹Android端集成微短劇項目的操作步驟。

源碼說明

源碼下載

如需獲取源碼詳情,請提交方案咨詢

環境要求

類別

要求

開發環境

建議使用Android Studio 4.0及以上版本。

系統版本

Android 5.0(SDK API Level 21)及以上版本。

其他

Android 5.0及以上版本的真機,暫不支持模擬器調試。

前提條件

您已獲取音視頻終端SDK的播放器的License授權證書和License Key,獲取的詳細步驟請參見申請License

8DCDA3B8-4BF9-43FD-A91D-4CEB8A5A5C93.png

跑通Demo

  1. 獲取Demo源碼后,在Android Studio中打開項目。

  2. 將上述步驟中獲取的License授權證書放到assets/cert目錄下。

  3. 打開AndroidManifest.xml文件,修改com.aliyun.alivc_license.licensekey的值為上述步驟中獲取的licensekey,修改com.aliyun.alivc_license.licensefile的值為上一步License授權證書放置的路徑。

    <!--    配置license    -->
    <meta-data
        android:name="com.aliyun.alivc_license.licensekey"
        android:value="" />
    <meta-data
        android:name="com.aliyun.alivc_license.licensefile"
        android:value="" />
  4. 真機測試

    1. 鏈接Android真機,連接成功后顯示如下圖。image.png

    2. 單擊下圖綠色運行按鈕,構建工程文件。image.png

    3. 安裝到Android真機上,運行微短劇應用。

集成組件

以下是 AUIShortVideoList 組件的使用方法及其對外接口的詳細介紹,旨在實現短視頻列表播放功能。

集成準備

  1. 接入已授權播放器的音視頻終端SDK License。

    具體操作,請參見Android端接入License

  2. AUIShortVideoList模塊拷貝到您項目工程中。

  3. 在項目gradle文件的repositories配置中,引入阿里云SDK的Maven源。

    請在項目根目錄的settings.gradle文件中添加以下內容:

    Groovy DSL示例

    repositories {
       // aliyun maven
       maven { url "https://maven.aliyun.com/repository/releases" }
    }

    Kotlin DSL示例

    repositories {
       // aliyun maven
       maven("https://maven.aliyun.com/repository/releases")
    }
  4. 增加模塊引用方式和依賴方式。

    • 添加模塊引用,請在項目根目錄的settings.gradle文件中添加以下內容:

      Groovy DSL示例

      // 若 AUIShortVideoList 模塊位于 AUIPlayerKits 文件夾中:
      include ':AUIPlayerKits:AUIShortVideoList'
      // 若 AUIShortVideoList 模塊直接放在項目根目錄:
      include ':AUIShortVideoList'

      Kotlin DSL示例

      // 若 AUIShortVideoList 模塊位于 AUIPlayerKits 文件夾中:
      include(":AUIPlayerKits:AUIShortVideoList")
      // 若 AUIShortVideoList 模塊直接放在項目根目錄:
      include(":AUIShortVideoList")
    • 添加模塊依賴,請在app模塊的build.gradle文件中添加以下內容:

      Groovy DSL示例

      // 若 AUIShortVideoList 模塊位于 AUIPlayerKits 文件夾中:
      implementation project(':AUIPlayerKits:AUIShortVideoList')
      // 若 AUIShortVideoList 模塊直接放在項目根目錄:
      implementation project(':AUIShortVideoList')

      Kotlin DSL示例

      // 若 AUIShortVideoList 模塊位于 AUIPlayerKits 文件夾中:
      implementation(project(":AUIPlayerKits:AUIShortVideoList"))
      // 若 AUIShortVideoList 模塊直接放在項目根目錄:
      implementation(project(":AUIShortVideoList"))
  5. 編譯運行,確保組件已被正確集成。

    說明
    1. 集成完成后,建議執行一次git commit,提交記錄當前組件最新的 commit ID。這為將來的組件更新提供重要的追溯依據,也記錄了組件更新前后的代碼差異,有效把控集成準入質量。同時還可以在尋求技術支持時快速定位組件版本,從而提高技術支持的效率。

    2. 集成問題詳見集成FAQ。

在完成 AUIShortVideoList 組件的集成準備后,您可以直接將以下代碼復制到項目中以進行使用。

使用方法

以下提供三種方法,通過不同方式對接AUIShortVideoList模塊,以便快速實現功能運行:

  • AUIShortVideoListActivity

    您可以將短視頻列表播放Activity頁面直接提供給外部進行跳轉,具體調用邏輯可參考以下示例(videoInfoListJSON 數據獲取,參見獲取數據)。

    Java示例

    // TODO: context is android context
    Intent intent = new Intent(context, AUIShortVideoListActivity.class);
    // TODO: videoInfoListJSON is the serialized string of List<VideoInfo>
    intent.putExtra(AUIShortVideoListView.KEY_VIDEO_INFO_LIST_DATA, videoInfoListJSON);
    startActivity(intent);

    Kotlin示例

    // TODO: context is android context
    val intent = Intent(context, AUIShortVideoListActivity::class.java)
    // TODO: videoInfoListJSON is the serialized string of List<VideoInfo>
    intent.putExtra(AUIShortVideoListView.KEY_VIDEO_INFO_LIST_DATA, videoInfoListJSON)
    startActivity(intent)
  • AUIShortVideoListFragment

    您可以將短劇列表播放Fragment嵌入到Activity頁面或者Fragment頁面中進行使用,具體調用邏輯可參考以下示例:

    1. 在XML布局文件中添加FrameLayout,用于承載Fragment:

      <FrameLayout
          android:id="@+id/fragment_container"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />
    2. 在代碼中初始化Fragment并嵌入到容器。

      Java示例

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          if (savedInstanceState == null) {
              AUIShortVideoListFragment fragment = new AUIShortVideoListFragment();
              Bundle bundle = new Bundle();
              // TODO: videoInfoListJSON is the serialized string of List<VideoInfo>
              bundle.putString(AUIShortVideoListView.KEY_VIDEO_INFO_LIST_DATA, videoInfoListJSON);
              fragment.setArguments(bundle);
              getSupportFragmentManager()
                      .beginTransaction()
                      .replace(R.id.fragment_container, fragment)
                      .commit();
          }
      }

      Kotlin示例

      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          if (savedInstanceState == null) {
              val fragment = AUIShortVideoListFragment()
              val bundle = Bundle()
              // TODO: videoInfoListJSON is the serialized string of List<VideoInfo>
              bundle.putString(AUIShortVideoListView.KEY_VIDEO_INFO_LIST_DATA, videoInfoListJSON)
              fragment.arguments = bundle
              supportFragmentManager
                  .beginTransaction()
                  .replace(R.id.fragment_container, fragment)
                  .commit()
          }
      }
  • AUIShortVideoListView

    您可以利用短視頻列表播放View組件,構建一個沉浸式的列表播放頁面,具體調用邏輯可參考以下示例:

    1. 在 XML 布局文件中添加短劇列表播放 View 組件:

      <!--  1. Add Short Video List View Component  -->
      <com.alivc.player.playerkits.shortvideolist.AUIShortVideoListView
          android:id="@+id/aui_video_list_view"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />
    2. 在代碼中聲明短視頻列表播放View組件,并添加List<VideoInfo> 數據源。

      Java示例

      // 2. Declaration of Short Video List View
      private AUIShortVideoListView mShortVideoListView;
      mShortVideoListView = findViewById(R.id.aui_video_list_view);
      
      // 3. TODO: Retrieve data and fill it into videoInfoList
      List<VideoInfo> videoInfoList;
      
      // 4. Add List<VideoInfo> type data source to Short Video List View
      mShortVideoListView.addSources(videoInfoList);
      // mShortVideoListView.loadSources(videoInfoList);

      Kotlin示例

      // 2. Declaration of Short Video List View
      private lateinit var mShortVideoListView: AUIShortVideoListView
      mShortVideoListView = findViewById(R.id.aui_video_list_view)
      
      // 3. TODO: Retrieve data and fill it into videoInfoList
      val videoInfoList: List<VideoInfo>
      
      // 4. Add List<VideoInfo> type data source to Short Video List View
      mShortVideoListView.addSources(videoInfoList)
      // mShortVideoListView.loadSources(videoInfoList)

獲取數據

AUIShortVideoList 組件使用的數據結構為List<VideoInfo>,其中VideoInfo為存儲視頻信息的數據類,其數據結構如下:

字段

類型

釋義

備注

id

int

視頻唯一id

用于唯一標識每一個視頻

url

String

視頻源地址

您可以自定義視頻源格式,如 MP4/M3U8 等

coverUrl

String

視頻封面圖

author

String

視頻作者

title

String

視頻標題

type

String

視頻類型

參考 VideoType 枚舉,視頻源 or 廣告

為了確保AUIShortVideoList組件正常運行,請通過Bundle傳遞已序列化的 List<VideoInfo> 字符串,以下是示例代碼:

intent.putExtra(AUIShortVideoListView.KEY_VIDEO_INFO_LIST_DATA, videoInfoListJSON);

您可以通過網絡請求或數據轉換這兩種方式,獲取最終的List<VideoInfo>數據源,并將其序列化為 JSON 字符串,示例如下:

  • 網絡請求

    Java示例

    AUIShortVideoListUtil.requestVideoInfoList(new AUIShortVideoListUtil.OnNetworkCallBack<List<VideoInfo>>() {
        @Override
        public void onResponse(List<VideoInfo> videoInfoList) {
            if (videoInfoList == null || videoInfoList.isEmpty()) {
                // TODO: Request video info list error!
                return;
            }
            String videoInfoListJSON = AUIShortVideoListUtil.serializeVideoInfoListToJson(videoInfoList);
            // TODO: Use videoInfoList or videoInfoListJSON...
        }
    });

    Kotlin示例

    AUIShortVideoListUtil.requestVideoInfoList(object : AUIShortVideoListUtil.OnNetworkCallBack<List<VideoInfo?>?> {
        override fun onResponse(videoInfoList: List<VideoInfo?>?) {
            if (videoInfoList.isNullOrEmpty()) {
                // TODO: Request video info list error!
                return
            }
            val videoInfoListJSON = AUIShortVideoListUtil.serializeVideoInfoListToJson(videoInfoList)
            // TODO: Use videoInfoList or videoInfoListJSON...
        }
    })
  • 數據轉換

    Java示例

    ArrayList<VideoInfo> videoInfoList = AUIShortVideoListUtil.assembleVideoInfoList();
    if (videoInfoList == null || videoInfoList.isEmpty()) {
        // TODO: Assemble video info list error!
        return;
    }
    String videoInfoListJSON = AUIShortVideoListUtil.serializeVideoInfoListToJson(videoInfoList);
    // TODO: Use videoInfoList or videoInfoListJSON...

    Kotlin示例

    val videoInfoList = AUIShortVideoListUtil.assembleVideoInfoList()
    if (videoInfoList.isNullOrEmpty()) {
        // TODO: Assemble video info list error!
        return
    }
    val videoInfoListJSON = AUIShortVideoListUtil.serializeVideoInfoListToJson(videoInfoList)
    // TODO: Use videoInfoList or videoInfoListJSON...

集成FAQ

播放黑屏等異常情況

請檢查您的SDK License配置,詳情請參見Android端接入License

編譯運行出現報錯

  1. 請確保模塊中的配置,如 compileSdkVersion、buildToolsVersionminSdkVersion、targetSdkVersion等,與您的項目中的設置保持一致。

  2. 如果您的項目中已有相同第三方庫,請調整模塊中的版本號,以確保兼容性并避免沖突。

模擬器運行無法播放

Android播放器SDK不支持模擬器運行,集成完成后需要真機上進行測試。

錯誤“Namespace not specified”

請檢查您的 AGP 版本。如果為較新版本(如8.3.2),需要手動在各模塊 build.gradle 中添加 namespace 設置。舊版本 AGP 此配置位于模塊 /src/main/res/AndroidManifest.xml 中的 package 屬性。

Gradle 在處理 repository 的優先級時出現沖突

請優先在 setting.gradle 中添加 repository。

搭建場景

AUIShortVideoList組件支持低代碼集成,適用于多種場景。您可以基于此組件構建短視頻列表的場景化功能。請參考AUIPlayerScenes中的示例,例如AUIShortDramaList(短劇劇場場景化模塊)和 AUIShortDramaFeeds(短劇Feeds流場景化模塊)。

短劇劇場場景

概述

AUIShortDramaList是短劇劇場場景化模塊,基于AUIShortVideoList組件實現。模塊提供了劇場詳情頁和推薦頁,并且支持一二級頁面嵌套和播放器實例共享。

場景集成

說明

在進行短劇劇場場景搭建之前,請確保已完成AUIShortVideoList組件的集成準備。

  1. AUIShortDramaList模塊拷貝到您項目工程中。

  2. 檢查AUIShortVideoList組件的依賴關系,并增加模塊引用和模塊依賴。

    • 檢查組件依賴,請在AUIShortDramaList模塊的 build.gradle 文件中檢查AUIShortVideoList組件的依賴配置:

      // 若 AUIShortVideoList 模塊位于 AUIPlayerKits 文件夾中:
      implementation project(':AUIPlayerKits:AUIShortVideoList')
      // 若 AUIShortVideoList 模塊直接放在項目根目錄:
      implementation project(':AUIShortVideoList')
    • 添加模塊引用,請在項目根目錄的 settings.gradle 文件中添加以下內容:

      Groovy DSL示例

      // 若 AUIShortDramaList 模塊位于 AUIPlayerScenes 文件夾中:
      include ':AUIPlayerScenes:AUIShortDramaList'
      // 若 AUIShortDramaList 模塊直接放在項目根目錄:
      include ':AUIShortDramaList'

      Kotlin DSL示例

      // 若 AUIShortDramaList 模塊位于 AUIPlayerScenes 文件夾中:
      include(":AUIPlayerScenes:AUIShortDramaList")
      // 若 AUIShortDramaList 模塊直接放在項目根目錄:
      include(":AUIShortDramaList")
    • 添加模塊依賴,請在 app 模塊的 build.gradle 文件中添加以下內容:

      Groovy DSL示例

      // 若 AUIShortDramaList 模塊位于 AUIPlayerScenes 文件夾中:
      implementation project(':AUIPlayerScenes:AUIShortDramaList')
      // 若 AUIShortDramaList 模塊直接放在項目根目錄:
      implementation project(':AUIShortDramaList')

      Kotlin DSL示例

      // 若 AUIShortDramaList 模塊位于 AUIPlayerScenes 文件夾中:
      implementation(project(":AUIPlayerScenes:AUIShortDramaList"))
      // 若 AUIShortDramaList 模塊直接放在項目根目錄:
      implementation(project(":AUIShortDramaList"))
  3. 編譯運行,確保組件已被正確集成。

使用方法

您可以將短劇劇場 Activity 頁面直接提供給外部進行跳轉,具體調用邏輯可參考以下示例。

Java示例

// TODO: context is android context
Intent intent = new Intent(context, AUIShortDramaListActivity.class);
startActivity(intent);

Kotlin示例

// TODO: context is android context
val intent = Intent(context, AUIShortDramaListActivity::class.java)
startActivity(intent)

獲取數據

AUIShortDramaList 模塊使用的數據結構為List<DramaInfo>,其中 DramaInfo 為存儲短劇劇集的數據類,其數據結構如下:

字段

類型

釋義

備注

id

int

劇集唯一id

title

String

劇集標題

cover

String

劇集封面

firstDrama

VideoInfo

劇集首集

firstDrama為 dramas 中的第一集

dramas

ArrayList<VideoInfo>

劇集列表

可作為 AUIShortVideoList 模塊的數據源

您可以通過網絡請求或數據轉換這兩種方式,獲取最終的List<DramaInfo> 數據源:

  • 網絡請求

    Java示例

    AUIShortDramaListUtil.requestDramaInfoList(new AUIShortVideoListUtil.OnNetworkCallBack<List<DramaInfo>>() {
        @Override
        public void onResponse(List<DramaInfo> dramaInfoList) {
            if (dramaInfoList == null || dramaInfoList.isEmpty()) {
                // TODO: Request drama info list error!
                return;
            }
            // TODO: Use dramaInfoList
        }
    });

    Kotlin示例

    AUIShortDramaListUtil.requestDramaInfoList(object : AUIShortVideoListUtil.OnNetworkCallBack<List<DramaInfo?>?> {
        override fun onResponse(dramaInfoList: List<DramaInfo?>?) {
            if (dramaInfoList.isNullOrEmpty()) {
                // TODO: Request drama info list error!
                return
            }
            // TODO: Use dramaInfoList
        }
    })
  • 數據轉換

    Java示例

    ArrayList<DramaInfo> dramaInfoList = AUIShortDramaListUtil.assembleDramaInfoList();
    if (dramaInfoList == null || dramaInfoList.isEmpty()) {
        // TODO: Assemble drama info list error!
        return;
    }
    // TODO: Use dramaInfoList

    Kotlin示例

    val dramaInfoList = AUIShortDramaListUtil.assembleDramaInfoList()
    if (dramaInfoList.isNullOrEmpty()) {
        // TODO: Assemble drama info list error!
        return
    }
    // TODO: Use dramaInfoList

短劇Feeds流場景

概述

AUIShortDramaFeeds是短劇 Feeds 流場景化模塊,基于AUIShortVideoList組件實現。模塊提供了Feeds流TAB頁,支持TAB頁嵌套以及上下左右滑動播放,實現了播放器實例共享。

場景集成

說明

在進行短劇 Feeds 流場景搭建之前,請確保已完成AUIShortVideoList組件的集成準備。

  1. AUIShortDramaFeeds模塊拷貝到您項目工程中。

  2. 檢查AUIShortVideoList組件的依賴關系,并增加模塊引用和模塊依賴。

    • 檢查組件依賴,請在AUIShortDramaFeeds模塊的 build.gradle 文件中檢查AUIShortVideoList組件的依賴配置:

      // 若 AUIShortVideoList 模塊位于 AUIPlayerKits 文件夾中:
      implementation project(':AUIPlayerKits:AUIShortVideoList')
      // 若 AUIShortVideoList 模塊直接放在項目根目錄:
      implementation project(':AUIShortVideoList')
    • 添加模塊引用,請在項目根目錄的 settings.gradle 文件中添加以下內容:

      Groovy DSL示例

      // 若 AUIShortDramaFeeds 模塊位于 AUIPlayerScenes 文件夾中:
      include ':AUIPlayerScenes:AUIShortDramaFeeds'
      // 若 AUIShortDramaFeeds 模塊直接放在項目根目錄:
      include ':AUIShortDramaFeeds'

      Kotlin DSL示例

      // 若 AUIShortDramaFeeds 模塊位于 AUIPlayerScenes 文件夾中:
      include(":AUIPlayerScenes:AUIShortDramaFeeds")
      // 若 AUIShortDramaFeeds 模塊直接放在項目根目錄:
      include(":AUIShortDramaFeeds")
    • 添加模塊依賴,請在 app 模塊的 build.gradle 文件中添加以下內容:

      Groovy DSL示例

      // 若 AUIShortDramaFeeds 模塊位于 AUIPlayerScenes 文件夾中:
      implementation project(':AUIPlayerScenes:AUIShortDramaFeeds')
      // 若 AUIShortDramaFeeds 模塊直接放在項目根目錄:
      implementation project(':AUIShortDramaFeeds')

      Kotlin DSL示例

      // 若 AUIShortDramaFeeds 模塊位于 AUIPlayerScenes 文件夾中:
      implementation(project(":AUIPlayerScenes:AUIShortDramaFeeds"))
      // 若 AUIShortDramaFeeds 模塊直接放在項目根目錄:
      implementation(project(":AUIShortDramaFeeds"))
  3. 編譯運行,確保組件已被正確集成。

使用方法

您可以將短劇 Feeds 流 Activity 頁面直接提供給外部進行跳轉,具體調用邏輯可參考以下示例。

Java示例

// TODO: context is android context
Intent intent = new Intent(context, AUIShortDramaFeedsActivity.class);
startActivity(intent);

kotlin示例

// TODO: context is android context
val intent = Intent(context, AUIShortDramaFeedsActivity::class.java)
startActivity(intent)

獲取數據

AUIShortDramaFeeds 模塊使用的數據結構為List<VideoInfo>,其中 VideoInfo 為存儲視頻信息的數據類;如需了解更詳細的內容,建議查閱AUIShortVideoList組件的完整文檔。

核心功能介紹

本組件功能使用阿里云播放器SDK,通過多個播放器實例(AliPlayer)+ 預加載(MediaLoader)+ 預渲染的方式進行實現,使用了預加載、預渲染、HTTPDNS、加密播放等核心能力,在播放延遲、播放穩定性及安全性方面大幅提升觀看體驗。具體介紹參考進階功能

預加載

通過滑動窗口策略,動態啟停視頻的預加載任務。SDK底層基于網絡狀態智能調節任務優先級,以確保正播放視頻和即將播放視頻可以獲得更多的網絡資源,顯著提升視頻秒開率,減少播放卡頓。即使在快速滑動視頻時,仍然可以獲得流暢的播放體驗。更多信息,請參見預加載。

預渲染

使用預渲染的方式,在后臺提前渲染后續視頻的首幀,減少黑屏的出現,讓播放更加絲滑。音視頻終端 SDK和播放器SDK從6.16.0版本開始增添了對強制預渲染功能的支持。更多信息,請參見預渲染。

多實例播放器池

實現了全局共享的播放器實例池,可以靈活配置實例數。通過優化 API 調用和線程資源管控,確保在線程管理、CPU利用、內存占用等方面達到性能最優、資源最省,使性能和體驗達到最佳平衡。通過性能優化,減少了滑動過程中的耗時操作,減少滑動卡頓,讓播放體驗更加絲滑。

HTTPDNS

HTTPDNS可以提供更快速和穩定的DNS解析服務,通過替換傳統DNS解析,可以減少DNS解析時間,提高視頻播放的加載速度和穩定性,從而提升用戶的觀看體驗。音視頻終端SDK和播放器SDK從6.12.0版本開始無需手動開啟HTTPDNS。更多信息,請參見HTTPDNS

視頻加密

微短劇場景的視頻通常為1~3分鐘的MP4格式視頻,音視頻終端SDK和播放器SDK從6.8.0版本開始支持MP4私有加密播放能力,為微短劇場景的視頻提供安全保障支撐。更多信息,請參見如何播放加密視頻。

經私有加密的MP4格式視頻,需滿足以下條件,才可正常播放:

  • 經私有加密的MP4視頻傳給播放器播放時,業務側(App側)需要為視頻URL追加etavirp_nuyila=1,例如:原視頻URL為https://example.aliyundoc.com/test.mp4,則需要傳給播放器播放的視頻URL為https://example.aliyundoc.com/test.mp4?etavirp_nuyila=1

  • App的License對應的uid與產生私有加密MP4的uid是一致的。

如何校驗私有加密視頻是否正確,以私有加密的視頻URL為例說明如下:

  • meta信息里面應帶有AliyunPrivateKeyUri的tag。

  • ffplay不能直接播放。

H265自適應播放

當播放H265流硬解失敗且已設置H264備流時,實現自動降級播放H264備流;若未設置H264備流,則自動降級為H265軟解播放。更多信息,請參見H265自適應播放

自適應ABR

播放器SDK支持多碼率自適應HLS、DASH視頻流,通過調用播放器的selectTrack方法切換播放的碼流,可以實現網絡自適應切換視頻清晰度的功能。更多信息,請參見自網絡自適應切換。

防錄屏

防錄屏通過監聽錄屏和截屏行為及時阻斷播放進程,有效保護視頻內容的版權,防止未經授權的盜錄和傳播。

// Android特有功能,禁止app錄屏和截屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

用戶指引

播放器SDK

音視頻終端SDK

阿里云·視頻點播

視頻點播控制臺

ApsaraVideo VOD