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

集成微短劇方案-Android

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

源碼說明

源碼下載

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

環境要求

類別

要求

開發環境

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

系統版本

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

其他

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

前提條件

您已獲取音視頻終端SDK的播放器的License授權和License Key。在選擇SDK應用場景時選擇音視頻播放,獲取的詳細步驟請參見申請License

image

跑通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. 請確保模塊中的配置,如 compileSdkVersionbuildToolsVersionminSdkVersiontargetSdkVersion等,與您的項目中的設置保持一致。

  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