本文主要介绍媒体上传过程中遇到的常见问题及解决方案。
为什么我上传的文件一直处于上传中?
视频点播服务本身无上传速度限制,实际上传速度取决于用户本地带宽和网络链路环境。
跨地域上传(如从美国上传至新加坡)的耗时受网络环境影响较大。
请排查是否由以下原因造成:
原因一: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