369
魔獸
Android播放器SDK說明__SDK文檔及下載_API及SDK_視頻直播-阿裏雲
概述
AlivcMediaPlayer是一款基於Android平台的多媒體視頻播放SDK。它為IOS的開發者提供了簡單易用的接口,幫助開發者方便快捷、低門檻的實現多媒體播放功能的開發。它支持HLS、RTMP、HTTP FLV、MP4等多種流媒體播放格式,視頻支持h264格式、音頻支持AAC格式。另外,針對直播用戶的需求,還增加了首幀秒開的功能;同時為了減少直播的延遲,增加了弱網條件下播放的跳幀功能。
版本和新增功能
功能 | 版本 |
---|---|
支持HLS、RTMP、HTTP FLV、mp4等流格式 | v1.0 |
支持h264+aac | v1.0 |
支持armv7、arm64 | v2.0 |
支持直播首幀秒開 | v2.1 |
支持弱網條件下的丟幀策略 | v2.1 |
支持多實例,支持https | v2.2 |
支持帶切邊的視頻渲染模式 | v2.2 |
閱讀對象
本文檔麵向所有使用該SDK的開發人員、測試人員以及對此感興趣的用戶,要求開發者對播放器的基本功能有一定的了解。
開發準備
設備和係統版本
android4.0及以上
手機芯片要求armv7或armv8架構
安裝包下載及說明
安裝包的下載地址為:點擊下載
播放器SDK的完整下載包中包含demo、doc、lib等:
- demo:主要存放了調用SDK的示例工程,可以幫助用戶了解如何使用該SDK。
- lib:播放器SDK開發包,包括jar文件和so文件。
- doc:存放SDK相關接口文檔。
快速開發
開發環境配置
- 需要配置好maven的Android開發環境。
在阿裏雲官網上注冊雲帳號,並開通視頻點播或視頻直播服務。方法如下:
[視頻點播服務開通](https://help.aliyun.com/document_detail/29938.html)
[視頻直播服務開通](https://help.aliyun.com/document_detail/29955.html)
3 . 通過訪問控製服務創建播放器專用子帳號及其AccessKey:
- a. 登陸訪問控製服務控製台
- b. 在用戶管理中新建用戶:
注意勾選為該用戶自動生成AccessKey 選項:
創建子帳號成功,注意保存好該帳號的AccessKey:
- c. 為子帳號分配調用播放器權限:
點擊授權鏈接:
在可選授權策略名稱中搜索mts,將AliyunMTSPlayerAuth授予此子帳號:
係統框圖
在開發之前,我們先來了解一下組成播放器的基本模塊以及播放器的工作流程,見下圖:
開發步驟
首先,需要在安卓應用程序中,聲明以下權限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
其次,按照下麵的步驟,使用sdk進行播放器的開發:
- 創建AliVcMediaPlayer播放接口。
- 注冊事件通知函數。
- 設置缺省解碼方式:如果缺省為硬解,會嚐試使用硬解,如果失敗使用軟解;如果缺省為軟解,那麼會一直使用軟解。
- 如果從曆史起點播放,那麼調用seek方法。
- 調用prepareAndPlay準備開始播放。
demo示例
在SDK中提供了Demo,此Demo是用播放器SDK開發了一個完整的視頻播放器,用戶可以參考Demo進行播放器的開發。
下麵給出了部分重要的Demo中調用SDK的代碼。
一、應用啟動的時候,給播放器類執行初始化工作
AliVcMediaPlayer.init(getApplicationContext(), businessId, new AccessKeyCallback() {
public AccessKey getAccessToken() {
return new AccessKey(accessKeyId, accessKeySecret);
}
});
二、創建播放器,準備視頻播放:
//1. 創建播放器
mPlayer = new AliVcMediaPlayer(context,surfaceView);
//2. 注冊事件通知
mPlayer.setPreparedListener(new VideoPreparedListener());
mPlayer.setErrorListener(new VideoErrorListener());
mPlayer.setInfoListener(new VideoInfolistener());
mPlayer.setSeekCompleteListener(new VideoSeekCompletelistener());
mPlayer.setCompletedListener(new VideoCompletelistener());
mPlayer.setVideoSizeChangeListener(new VideoSizeChangelistener());
mPlayer.setBufferingUpdateListener(new VideoBufferUpdatelistener());
//3. 設置缺省編碼類型:0表示硬解;1表示軟解;
mPlayer.setDefaultDecoder(0);
//4. 如果從曆史點開始播放
mPlayer.seekTo(position);
//5. 準備開始播放
mPlayer.prepareAndPlay(msURI.toString());
三、準備完成事件通知中:
private class VideoPrepareListener implements AliVcMediaPlayer.MediaPlayerPreparedListener{
@Override
public void onPrepared() {
//更新視頻總進度
} }
四、錯誤事件通知中:
private class VideoErrorListener implements AliVcMediaPlayer.MediaPlayerErrorListener {
public void onError(int what, int extra) {
switch(what)
{
case MediaPlayer.ALIVC_ERR_ILLEGALSTATUS:
// 非法狀態!
break;
case MediaPlayer.ALIVC_ERR_NO_NETWORK:
//report_error("視頻資源或網絡不可用!", true);
break;
case MediaPlayer.ALIVC_ERR_INVALID_INPUTFILE:
//視頻資源或網絡不可用!
break;
case MediaPlayer.ALIVC_ERR_NO_SUPPORT_CODEC:
//無支持的解碼器!
break;
case MediaPlayer.ALIVC_ERR_FUNCTION_DENY:
//無此操作權限!
break;
case MediaPlayer.ALIVC_ERR_UNKNOWN:
//未知錯誤!
break;
case MediaPlayer.ALIVC_ERR_NOTAUTH:
//未鑒權!
break;
case MediaPlayer.ALIVC_ERR_READD:
//資源訪問失敗!
break;
default:
//播放器錯誤!
break;
}
}
}
五、播放信息事件通知中:
private class VideoInfolistener implements AliVcMediaPlayer.MediaPlayerInfoListener {
public int onInfo(int what, int extra){
switch (what)
{
case MediaPlayer.MEDIA_INFO_UNKNOW:
// 未知
break;
case MediaPlayer.MEDIA_INFO_BUFFERING_START:
// 開始緩衝
break;
case MediaPlayer.MEDIA_INFO_BUFFERING_END:
// 結束緩衝
break;
case MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START:
// 首幀顯示時間
break;
}
return 0;
}
}
播放器可配置參數與可選功能
配置參數接口 | 用途描述 |
---|---|
setTimeout | 設置網絡超時斷開鏈接的時間 |
setMaxBufferDuration | 設置直播過程中緩衝區視頻丟幀的起始時間,若緩衝區中視頻幀的時長超過這個值,則開始丟幀操作。設置這個參數可以控製直播延時的長度,參數值越小則直播的延遲越小。 |
seek功能
接口名稱 | 用途描述 |
---|---|
seekTo | seek到指定位置之前的最近的一個關鍵幀 |
seekToAccurate | 精準跳轉到指定位置 |
除了上述可配置的功能和參數,AlivcMediaPlayer還定義了播放器的事件狀態通知和錯誤代碼,以方便開發者掌握播放器的運行狀態。
若需要了解上述功能和接口的詳細用法,請參照下節的接口說明。
接口說明
SDK中提供了兩個類AliVcMediaPlayer和AliVcMediaPlayerFactory,其中AliVcMediaPlayer是播放器SDK使用類,AliVcMediaPlayerFactory用來創建播放器AliVcMediaPlayer。同時我們還提供了多個事件通知接口,用來監聽播放器的各種狀態。
名稱 | 功能描述 |
---|---|
AliVcMediaPlayerFactory | 創建媒體播放器接口 |
MediaPlayer | 媒體播放器功能接口類 |
AliVcMediaPlayer | 媒體播放器功能實現類 |
MediaPlayerPrepareListener | 視頻播放準備完成監聽接口 |
MediaPlayerCompletedListener | 視頻播放完成監聽接口 |
MediaPlayerInfoListener | 視頻播放信息監聽接口 |
MediaPlayerSeekCompleteListener | 視頻跳轉完成監聽接口 |
MediaPlayerBufferingUpdateListener | 視頻緩衝監聽接口 |
MediaPlayerVideoSizeChangeListener | 視頻大小改變監聽接口 |
MediaPlayerErrorListener | 視頻播放錯誤監聽接口 |
AliVcMediaPlayerFactory
類名:AliVcMediaPlayerFactory
功能:創建媒體播放器接口類 MediaPlayer
成員:
成員 | 功能 |
---|---|
createPlayer | 創建媒體播放器MediaPlayer |
詳細說明:
MediaPlayer createPlayer(Context context,int decoder_type,
String path)
createPlayer用來創建播放器,返回MediaPlayer類。
參數:
• path:播放器文件路徑,本地或者網絡地址。
返回值:返回空為錯誤,正確則為有效的MediaPlayer值。
MediaPlayer
類名:MediaPlayer
功能:媒體播放器接口類,提供播放控製
成員:
成員 | 功能 |
---|---|
init | 初始化播放器 |
prepareToPlay | 準備視頻播放 |
play | 開始播放視頻 |
pause | 暫停視頻播放 |
stop | 停止視頻播放 |
reset | 釋放播放器 |
seekTo | 跳轉到指定位置 |
isPlaying | 是否正在播放 |
setVolumn | 調節音量 |
getVideoWidth | 獲取視頻寬度 |
getVideoHeight | 獲取視頻高度 |
getDuration | 獲取視頻長度 |
getCurrentPosition | 獲取當前視頻播放位置 |
getUserPriority | 獲取播放器權限 |
setPreparedListener | 注冊視頻準備完成通知 |
setCompletedListener | 注冊播放完成通知 |
setInfoListener | 注冊播放信息通知 |
setErrorListener | 注冊播放錯誤通知 |
setSeekCompleteListener | 注冊跳轉完成通知 |
setBufferingUpdateListener | 注冊緩衝更新通知 |
setVideoSizeChangeListener | 注冊視頻大小改變通知 |
getErrorCode | 獲取錯誤碼 |
setSurfaceChanged | 設置 surface 發生改變 |
enalbeNativeLog | 打開底層日誌,在開發階段使用 |
disableNativeLog | 關閉底層日誌,在 release 階段使用 |
setVideoSurface | 設置視頻顯示的 surface |
releaseVideoSurface | 釋放視頻顯示的 surface |
setTimeout | 設置 IO 超時時間,單位毫秒 |
setMaxBufferDuration | 設置最大的緩衝時長,直播中有效 |
setMediaType | 設置視頻源類型 |
setDefaultDecoder | 設置默認的解碼器 |
getPropertyDouble | 獲取性能參數 |
getPropertyLong | 獲取長整型性能參數 |
getCurrNativeLog | 獲取 Natvie 的日誌 |
getAllDebugInfo | 獲取全部 debug 信息 |
destroy | 回收播放器 |
setMuteMode | 設置靜音模式 |
setVideoScalingMode | 設置視頻渲染的縮放模式 |
下麵詳細介紹一下各個成員函數的具體使用:
init
public static void init(Context context, String
businessId, AccessKeyCallback callback);
功能:初始化播放器
參數:
context: Android 上下文;
callback:AccessKey 的回調函數;
businesssId:業務ID,用戶自行設置,用於標識使用播放器sdk的APP。如“淘寶直播”就設置“TaobaoLive”。
prepareToPlay
public void prepareToPlay(String url);
功能:根據視頻文件內容初始化播放器實例,包括讀取視頻頭,解析視頻和音頻信息,並根據視頻和音頻信息初始化解碼器,創建下載(或讀取本地文件)、解碼、渲染線程等。
參數:
url:當前播放視頻的文件名或網絡地址。
play
public void play();
功能:播放當前視頻。
pause
public void pause();
功能:暫停視頻播放。
stop
public void stop();
功能:停止視頻播放。
destroy
public void destroy();
功能:回收播放器。
備注:當整個播放器退出時調用,回收播放器。
reset
public void reset();
功能:重置播放器。當播放的過程中調用該函數,會先停止當前的播放行為,銷毀當前的播放器,然後創建一個新的播放器。
seekTo
public void seekTo(int msc);
功能:跳轉到指定位置前的第一個關鍵幀的位置。
參數:msc:跳轉的位置,單位為毫秒。
備注:該函數僅允許在點播或播放本地視頻過程中調用(直播禁用)。調用後視頻會跳轉到指定位置前最近的一個關鍵幀。參數的範圍為[0,duration](duration為視頻的時長)。如果傳入的參數小於0,則播放器會自動將該參數修正到0;如果傳入參數大於duration,則修正到duration。
isPlaying
public boolean isPlaying();
功能:視頻是否在播放。
返回值:true 代表正在播放,否則沒有在播放。
setVolume
public void setVolume(int vol);
功能:設置播放器音量
參數:
vol: 音量大小,範圍為 0-100,100 為最大,0 為最小。
getVideoWidth
public int getVideoWidth();
功能:獲取視頻寬度
返回值:返回視頻寬度。返回值為0表示獲取視頻寬度失敗。
getVideoHeight
public int getVideoHeight();
功能:獲取視頻高度。
返回值:返回視頻高度。返回值為0表示獲取視頻高度失敗。
getDuration
public int getDuration();
功能:獲取視頻時長。
返回值:返回視頻時長,單位為毫秒。
getCurrentPosition
public int getCurrentPosition();
功能:獲取視頻的當前播放位置。
返回值:視頻的當前播放位置,單位為毫秒。
getErrorCode
public int getErrorCode();
功能:當播放器出錯時,調用該函數獲取播放器錯誤碼。
返回值:播放器的錯誤碼。
setSurfaceChanged
public void setSurfaceChanged();
功能:通知 surface 改變
備注:在播放暫停或卡頓時,這個時候旋轉手機屏幕,會發生渲染錯位。為了解決這一問題,請在surfaceChanged發生時,調用此方法。如果播放界麵關閉了自動旋轉功能,無須調用此方法。
enableNativeLog
public void enableNativeLog();
功能:打開底層日誌。備注:僅在開發階段調用此方法。打開底層日誌,意味著底層的日誌首先會通過adb logcat的形式輸出,另外在應用層,還可以通過getCurrNatvieLog方法獲取底層日誌。
disableNativeLog
public void disableNativeLog();
功能:關閉底層日誌。
getCurrNatvieLog
public List<VideoNativeLog> getCurrNatvieLog();
功能:獲取 Native 日誌。
備注:僅僅在 enableNativeLog 有效。此方法返回底層日誌列表,每條日誌(VideoNativeLog) 包含如下幾個字段:
Tag:日誌的 tag,不唯一。
Content:日誌的內容。
Time:日誌的時間。
Level:日誌的級別(0 表示 ANDROID_ LOG_ UNKNOWN ; 1 表示 ANDROID_ LOG_ DEFAULT ; 2 表示 ANDROID_ LOG_ VERBOSE ;3 表示 ANDROID_ LOG_ DEBUG;4 表示 ANDROID_ LOG_ INFO;5 表示ANDROID_ LOG_ WARN ; 6 表 示 ANDROID_ LOG_ ERROR ; 7 表 示 ANDROID_ LOG_ FATAL ; 8 表 示ANDROID_ LOG_ SILENT)。
setVideoSurface
public void setVideoSurface(Surface surface);
功能:設置視頻播放 Surface
參數:
surface: 視頻播放 View 的 surface。
備注:使用場景是之前的 surface 已經銷毀,但是還要繼續播放;或者想在一個新的 surface 上顯示視頻 。特別注意,在初始化播放器的時候,已經傳入了 surface,所以在釋放以前的 surface 之前,是不允許再次設置新的 surface 的。也就是說請先 releaseVideoSurface 再 setVideoSurface。
releaseVideoSurface
public void releaseVideoSurface();
功能:釋放視頻 Surface。
備注:使用場景是當前的 surface 被銷毀;或者想在一個新 surface 上顯示視頻,需要提前釋放當前的 surface。如果使用播放器構造函數或者setVideoSurface 設置了 surface,那麼就可以通過releaseVideoSurface 釋放當前的 surface,但是一旦釋放之後,就不能再次調用,否則就會出現黑屏。
setTimeout
public void setTimeout(int timeout);
功能:設置 IO 超時時間。
參數:
timeout:超時時長,單位毫秒。
備注:當播放器超過設定時間沒有下載到任何數據,會發送。ALIVC ERR LOADING_ TIMEOUT 錯誤事件。係統默認 timeout 時間為 15000 毫秒。
setMaxBufferDuration
public void setMaxBufferDuration(int duration);
功能:設置直播最大緩衝時長。
參數:
duration: 緩衝時長,單位毫秒。
備注:該函數僅對直播場景有效,主要用於縮短主播與觀眾之間的時間延遲。當緩衝區中的視頻時長超過設置的 duration 時,播放器會自動丟棄部分音視頻數據,以減少延遲。係統默認 rtmp、http flv 直播時 duration為8秒,HLS直播時duration為40秒。建議rtmp、http flv直播時,duration 的值超過 GOP 時長(即兩個關鍵幀之間的時間長度)的 2 倍;HLS 直播時,duration 的值超過 m3u8 文件中所有 ts 分片的總時長。這樣可以避免出現經常性的視頻丟幀。
setMediaType
public void setMediaType(MediaType type);
功能:設置播放類型。
參數:
type: 媒體類型。MediaType.Live 表示直播;MediaType.Vod 表示點播
備注:建議在可以清晰分辨視頻類型的情況下盡量調用該函數。如果不調用,則播放器會自動根據視頻的 duration 來判斷媒體類型。Duration 為 0 且格式為 HLS、rtmp、http flv 的為直播類視頻,其他為點播類視頻。
setDefaultDecoder
public void setDefaultDecoder(int decoderType);`
功能:設置默認的解碼器。
參數:
type: 解碼器類型。0代表硬件解碼器;1代表軟件解碼器。
備注:默認為軟件解碼。由於android手機硬件適配性的問題,很多android手機的硬件解碼會有問題,所以,我們建議盡量使用軟件解碼。
setMuteMode
public void setMuteMode(boolean on);
功能:設置播放器是否靜音。
備注:靜音指播放器的靜音,並不會影響係統音量。
setScalingMode
public void setVideoScalingMode(VideoScalingMode scalingMode);
enum VideoScalingMode
{
VIDEO_SCALING_MODE_SCALE_TO_FIT(0),
VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING(1)
};
功能:設置播放器渲染時的縮放模式,目前有兩種模式,VIDEO_ SCALING_ MODE_ SCALE_ TO_ FIT:等比例縮放顯示,如果視頻長寬比和屏幕長寬比不一致時,會存在黑邊;VIDEO_ SCALING_ MODE_ SCALE_ TO_ FIT_ WITH_ CROPPING:帶裁邊的等比例縮放,如果視頻長寬比和屏幕長寬比不一致時,會進行裁邊處理以保持全屏顯示。
備注:默認為VIDEO_ SCALING_ MODE_ SCALE_ TO_ FIT_ WITH_ CROPPING模式,可以動態改變。
getPropertyDouble
public double getPropertyDouble(int key,double defaultValue);
功能:獲取 Double 型性能參數。
參數:
defaultValue:缺省數據。
key:關鍵字常量。
關鍵字 | 描述 |
---|---|
MediaPlayer.PROP_ DOUBLE_ VIDEO_ DECODE_ FRAMES_ PER_ SECOND | 視頻解碼幀率 |
MediaPlayer.PROP_ DOUBLE_ VIDEO_ OUTPUT_ FRAMES_ PER_ SECOND | 視頻渲染幀率 |
MediaPlayer.FFP_ PROP_ DOUBLE_ OPEN_ FORMAT_ TIME | 調用 avformat_ open_ input 的時刻,單位毫秒 |
MediaPlayer.FFP_ PROP_ DOUBLE_ FIND_ STREAM_ TIME | 調用 avformat_ find_ stream_ info 的時刻,單位毫秒 |
MediaPlayer.FFP_ PROP_ DOUBLE_ OPEN_ STREAM_ TIME | 從開始下載到渲染出第一個視頻幀的時間,單位毫秒 |
MediaPlayer.FFP_ PROP_ DOUBLE_ 1st_ VFRAME_ SHOW_ TIME | 首個視頻幀渲染時刻,單位毫秒 |
MediaPlayer.FFP_ PROP_ DOUBLE_ 1st_ AFRAME_ SHOW_ TIME | 首個音頻幀渲染時刻,單位毫秒 |
MediaPlyer.FFP_ PROP_ DOUBLE_ 1st_ VPKT_ GET_ TIME | 首個視頻幀下載時刻,單位毫秒 |
MediaPLyer.FFP_ PROP_ DOUBLE_ 1st_ APKT_ GET_ TIME | 首個音頻幀下載時刻,單位毫秒 |
MediaPlayer.FFP_ PROP_ DOUBLE_ 1st_ VDECODE_ TIME | 首個視頻幀解碼時刻,單位毫秒 |
MediaPlayer.FFP_ PROP_ DOUBLE_ 1st_ ADECODE_ TIME | 首個音頻幀解碼時刻,單位毫秒 |
MediaPLyaer.FFP_ PROP_ DOUBLE_ DECODE_ TYPE | 視頻解碼器類型 |
MediaPlayer.FFP_ PROP_ DOUBLE_ LIVE_ DISCARD_ DURATION | 直播視頻丟棄音視頻幀時長,單位毫秒 |
MediaPlayer.FFP_ PROP_ DOUBLE_ LIVE_ DISCARD_ CNT | 直播視頻丟棄音視頻幀數量總和 |
MediaPlayer.FFP_ PROP_ DOUBLE_ DISCARD_ VFRAME_ CNT | 直播視頻丟棄視頻幀數量總和 |
MediaPlayer.FFP_ PROP_ DOUBLE_ RTMP_ OPEN_ DURATION | RTMP 流打開時長,單位毫秒 |
MediaPlayer.FFP_ PROP_ DOUBLE_ RTMP_ OPEN_ RTYCNT | RTMP 重連次數 |
MediaPlayer.FFP_ PROP_ DOUBLE_ RTMP_ NEGOTIATION_ DURATION | RTMP 連接握手時長,單位毫秒 |
MediaPlayer.FFP_ PROP_ DOUBLE_ HTTP_ OPEN_ DURATION | HTTP 流打開時長,單位毫秒 |
MediaPlayer.FFP_ PROP_ DOUBLE_ HTTP_ OPEN_ RTYCNT | HTTP 重連次數 |
MediaPlayer.FFP_ PROP_ DOUBLE_ HTTP_ REDIRECT_ CNT | HTTP 重定向次數 |
MediaPlayer.FFP_ PROP_ DOUBLE_ TCP_ CONNECT_ TIME | TCP 連接時長,單位毫秒 |
MediaPlayer.FFP_ PROP_ DOUBLE_ TCP_ DNS_ TIME | TCP 連接 DNS 時長,單位毫秒 |
getPropertyLong
public long getPropertyLong(int key,long defaultValue);
功能:獲取 Long 型性能參數。
參數:
defaultValut:缺省數據。
key:關鍵字常量。
關鍵字 | 描述 |
---|---|
MediaPlayer.FFP_ PROP_ INT64_ VIDEO_ CACHED_ DURATION | 視頻緩衝時長,單位毫秒 |
MediaPlayer.FFP_ PROP_ INT64_ AUDIO_ CACHED_ DURATION | 音頻緩衝時長,單位毫秒 |
MediaPlayer.FFP_ PROP_ INT64_ VIDEO_ CACHED_ BYTES | 視頻緩衝大小,單位 byte |
MediaPlayer.FFP_ PROP_ INT64_ AUDIO_ CACHED_ BYTES | 音頻緩衝大小,單位毫秒 |
MediaPlayer.FFP_ PROP_ INT64_ VIDEO_ CACHED_ PACKETS | 視頻緩衝幀數 |
MediaPlayer.FFP_ PROP_ INT64_ AUDIO_ CACHED_ PACKETS | 音頻緩衝幀數 |
MediaPlayer.FFP_ PROP_ INT64_ SELECTED_ VIDEO_ STREAM | 視頻流 index |
MediaPlayer.FFP_ PROP_ INT64_ SELECTED_ AUDIO_ STREAM | 音頻流 index |
getAllDebugInfo
public Map<String, String> getAllDebugInfo();
功能:獲取實時性能數據。
備注:返回的性能參數包含:
"dec-fps":視頻解碼 fps
"out-fps":視頻渲染 fps
"select-v":視頻流 index
"select_a":音頻流 index
"v-dec":視頻解碼器名稱
"a-dec":音頻解碼器名稱
"vcache-dur":視頻緩衝時長,單位秒
"acache-dur":音頻緩衝時長,單位秒
"vcache-bytes":視頻緩衝大小,單位 byte
"acache-bytes":音頻緩衝大小,單位 byte
"vcache-pkts":視頻緩衝幀數
"acache-pkts":音頻緩衝幀數
AliVcMediaPlayer
MediaPlayer的實現類。
MediaPlayerPrepareListener
當調用prepareAsync後,視頻準備完成後會發送準備完成事件,用戶需要注冊該事件,以便獲取到該事件通知,在準備完成後調用start接口進行視頻播放。
public interface MediaPlayerPrepareListener {
void onPrepared();
}
MediaPlayerCompletedListener
當視頻播放完成後,會發出該事件通知消息,用戶需要注冊該事件,在播放完成後完成相關清理工作。
public interface MediaPlayerCompletedListener {
void onCompleted();
}
MediaPlayerInfoListener
當視頻開始播放,用戶需要知道視頻的相關信息,可以注冊該事件。
public interface MediaPlayerInfoListener{
void onInfo(int what, int extra);
}
參數:
what:獲取到的播放信息或警告的類型.播放的相關信息有:
• MEDIA_ INFO_ UNKNOW:未知信息
• MEDIA_ INFO_ BUFFERING_ START:當開始緩衝時,收到該信息
• MEDIA_ INFO_ BUFFERING_ END:緩衝結束時收到該信息
extra:對播放信息的額外表述。
MediaPlayerErrorListener
當視頻播放出現錯誤後,會發出該事件通知消息,用戶需要注冊該事件通知,以便在出現錯誤後給出相關錯誤提示。
public interface MediaPlayerErrorListener {
void onError(int what, int extra);
}
參數:
what:錯誤信息的類型.錯誤信息有:
• ALIVC_ ERR_ UNKNOW:未知錯誤
• ALIVC_ ERR_ LOADING_ TIMEOUT:緩衝超時
• ALIVC_ ERR_ NO_ INPUTFILE:未設置視頻源
• ALIVC_ ERR_ NO_ VIEW:無效的surface
• ALIVC_ ERR_ INVALID_ INVALID_ INPUTFILE: 無效的視頻源
• ALIVC_ ERR_ NO_ SUPPOR_ CODEC:無支持的解碼器
• ALIVC_ ERR_ FUNCTION_ DENIED:操作無權限
• ALIVC_ ERR_ NO_ NETWORK: 網絡不可用
• ALIVC_ ERR_ ILLEGALSTATUS:非法狀態
• ALIVC_ ERR_ NOTAUTH:未鑒權
• ALIVC_ ERR_ READD:視頻源訪問失敗
extra:錯誤信息的額外描述
• ALIVC_ ERR_ EXRA_ DEFAULT:缺省值
• ALIVC_ ERR_ EXTRA_ PREPARE_ FAILED:prepare失敗
• ALIVC_ ERR_ EXTRA_ OPEN_ FAILED: open stream 失敗
MediaPlayerSeekCompleteListener
當視頻進行seek跳轉後,會發出該事件通知消息,用戶注冊該事件通知後,能收到跳轉完成通知。
public interface MediaPlayerSeekCompleteListener {
void onSeekCompleted();
}
MediaPlayerBufferingUpdateListener
當網絡下載速度較慢來不及播放時,會發送下載緩衝進度通知。
public interface MediaPlayerBufferingUpdateListener {
void onBufferingUpdateListener(int percent);
}
參數:
percent: 目前視頻緩衝的進度,範圍為0-100,100代表緩衝完成,0代表緩衝開始。
MediaPlayerVideoSizeChangeListener
當視頻播放時視頻大小改變後,會發出該事件通知。
public interface MediaPlayerVideoSizeChangeListener {
void onVideoSizeChange(int width, int height);
}
參數:
width:視頻改變之後的寬度
height:視頻改變之後的高度
版本更新說明
1.0 原始版本,調用硬件的mediaPlayer接口實現
2.0 改用硬件的mediaCodec接口實現
2.1 增加直播秒開功能、緩衝區丟幀策略等。
2.2 支持多實例、支持https、增加靜音功能、添加視頻渲染時的縮放模式
最後更新:2016-11-23 17:16:11
上一篇:
iOS 推流SDK使用說明__SDK文檔及下載_API及SDK_視頻直播-阿裏雲
下一篇:
iOS播放器SDK說明__SDK文檔及下載_API及SDK_視頻直播-阿裏雲
購買流程__購買指導_消息服務-阿裏雲
Windows Server 2008 一鍵安裝Web環境全攻略__其它Web服務_Web服務/數據庫服務_Windows操作運維問題_雲服務器 ECS-阿裏雲
查詢域名下的截圖配置__直播API_API及SDK_視頻直播-阿裏雲
Hadoop MapReduce 作業配置__作業_用戶指南_E-MapReduce-阿裏雲
Shell 作業配置__作業_用戶指南_E-MapReduce-阿裏雲
TCP協議Demo__高級課程_性能測試視頻教程_性能測試-阿裏雲
SecurityGroupIdSetType__數據類型_API 參考_雲服務器 ECS-阿裏雲
代金券使用後是否可以退換?___代金券_代金券及推薦碼_財務-阿裏雲
服務器端加密編碼__安全管理_開發人員指南_對象存儲 OSS-阿裏雲
查詢數據庫__數據庫管理_開放API_分布式關係型數據庫 DRDS-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲