本文主要介紹媒體上傳過程中遇到的常見問題及解決方案。
為什麼我上傳的檔案一直處於上傳中?
ApsaraVideo for VOD服務本身無上傳速度限制,實際上傳速度取決於使用者本地頻寬和網路鏈路環境。
跨地區上傳(如從美國上傳至新加坡)的耗時受網路環境影響較大。
請排查是否由以下原因造成:
原因一:URL批量拉取上傳為非同步上傳,不保證時效性
如果是通過URL批量拉取上傳介面上傳,URL批量拉取上傳是非同步任務,非即時,不保證時效性,一般提交後會在數小時、甚至數天內完成遷移上傳。且該介面目前僅支援華東 2(上海)、華北 2(北京)、華南 1(深圳)、新加坡、美國(矽谷)地區,建議您整合點播服務端上傳SDK進行上傳。
原因二:只產生了上傳憑證,但沒有上傳檔案
如果是通過調用擷取音視頻上傳地址和憑證介面上傳,此介面僅用於擷取上傳憑證和建立媒資基礎資訊,並非上傳檔案,後續您還需要調用OSS能力完成上傳,完整的上傳步驟,請參見使用點播API上傳媒資檔案。
原因三:上傳檔案過大導致上傳時間較長
請確認上傳檔案大小以及處於“上傳中”狀態的時間是否處於合理範圍。通過控制台、上傳SDK和用戶端上傳工具等方式上傳檔案時,預設會使用分區上傳,最大支援上傳48.8 TB的單個檔案;上傳SDK同時也提供簡單上傳功能,其最大支援上傳5 GB的單個檔案。
原因四:網路問題
請確認網路頻寬是否符合預期。
如何清理無效任務
以下兩種情況會導致任務長時間停留在上傳中狀態:
僅建立憑證但未實際上傳:調用建立上傳憑證介面後如果沒有實際上傳檔案,任務會一直顯示上傳中且不會自動關閉。
上傳中斷顯示失敗:上傳中斷後顯示失敗的任務也不會自動刪除。
上述兩種情況均需要您在控制台手動取消或刪除相關任務。
使用iOS上傳SDK上傳失敗,並報錯Error Domain=NSCocoaErrorDomain
上傳失敗並報錯(錯誤碼207,錯誤資訊Error Domain=NSCocoaErrorDomain),通常是由於讀取檔案錯誤,沒有許可權導致。您可以通過以下方式解決:
方式一:授予iOS上傳SDK讀取本地資源的許可權。
方式二:將本地資源存放到沙箱路徑下,再上傳。
使用URL批量拉取上傳時提示“The service is not open in current region”的錯誤
提示The service is not open in current region表示當前服務地區暫不支援使用URL批量拉取上傳方式進行上傳,URL批量拉取上傳目前僅支援在華東2(上海)和新加坡地區使用。
如果您非上述地區,建議您將音視頻檔案下載到本地,然後再通過上傳SDK進行上傳,詳情請參見上傳SDK概述。
上傳圖片類型檔案後無法通過控制台裡查看
上傳圖片類型媒資檔案時,如果設定類型為cover(視頻封面)類型時控制台是無法展示此類檔案的;您只能通過API介面來進行查詢對應的圖片。詳情請參見擷取圖片上傳地址和憑證。
微信中使用JS SDK上傳存在相容性問題,無法正常上傳
經過排查由於微信瀏覽器對於H5存在相容性問題,需要將<input type="file" name="file" id="files" multiple="">中的 multiple=""參數去掉就可以正常上傳。
推流SDK特定解析度時出現預覽頁面展開現象
推流SDK在選擇推流解析度為480p時預覽頁面出現展開的現象,但是實際推流是正常的。主要因為480p對應的解析度為480×640,由於大多數手機螢幕均不支援該解析度的比例導致出現展開的現象。
解決辦法:修改預覽頁面surfaceview的比例,請將activity_push.xml內容修改如下即可。
public void initView() {
mPreviewView = (SurfaceView) findViewById(R.id.preview_view);
mPreviewView.getHolder().addCallback(mCallback);
}<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<SurfaceView
android:id="@+id/preview_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!--FrameLayout-->
<!--android:id="@+id/publisher_fragment"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="match_parent"-->
<!--android:visibility="gone"/>-->
<android.support.v4.view.ViewPager
android:id="@+id/tv_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</android.support.v4.view.ViewPager>
</RelativeLayout>Android Studio如何查看和匯入aar包資料
查看aar包資料:將.aar檔案尾碼改成.zip並解壓,查看.class、.xml、.jar、圖片、文本等各種內容。
匯入aar包資料:
拷貝
.aar檔案到工程專案下,路徑一般為projectName/libs/,重新載入工程。 將AlivcPlayer.aar、aliyun-vod-upload-android-sdk-1.1.1.jar、aliyun-vod-croe-android-sdk-1.2.1.jar、gson-2.8.0.jar、jsr305-3.0.0.jar等庫檔案拷貝到工程的 app > libs 目錄下,拷貝完成後重新載入工程。在build.gradle根標籤下添加本地倉庫路徑,並在dependencies中添加編譯依賴。
其中libs目錄按照實際工程下的包引入檔案夾名稱而定。在compile參數中,name的值為aar檔案的名字,ext為檔案的副檔名。
repositories{ flatDir{ dirs 'libs' } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:26+' compile 'com.android.support:design:26+' compile (name:'AlivcPlayer',ext:'aar') // 上傳SDK 需要依賴OSS上傳的SDK compile 'com.aliyun.dpa:oss-android-sdk:2.4.5' }選擇 build > rebuild,重新構建project。
構建完成之後,在工程的External Libraries中即可看到引入的aar包。
External Libraries ├── Android API 26 Platform ├── JRE 1.8 ├── AlivcPlayer:@aar │ ├── classes.jar (library root) │ │ └── com │ │ ├── alivc.player │ │ └── aliyun.aliyunplayer │ └── res (library root) │ ├── values │ └── values-zh-rCN ├── com.aliyun.dpa:oss-android-sdk-2.4.5 ├── com.android.support:animated-vector-drawable:26.0.0-alpha1 ├── com.android.support:appcompat-v7:26.0.0-alpha1 ├── com.android.support:design:26.0.0-alpha1 ├── com.android.support:recyclerview-v7:26.0.0-alpha1 ├── com.android.support:support-annotations:26.0.0-alpha1 └── com.android.support:support-compat:26.0.0-alpha1