閱讀369 返回首頁    go 魔獸


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等:

  1. demo:主要存放了調用SDK的示例工程,可以幫助用戶了解如何使用該SDK。
  2. lib:播放器SDK開發包,包括jar文件和so文件。
  3. doc:存放SDK相關接口文檔。

快速開發

開發環境配置

  1. 需要配置好maven的Android開發環境。
  2. 在阿裏雲官網上注冊雲帳號,並開通視頻點播或視頻直播服務。方法如下:

    1. [視頻點播服務開通](https://help.aliyun.com/document_detail/29938.html)
    2. [視頻直播服務開通](https://help.aliyun.com/document_detail/29955.html)

3 . 通過訪問控製服務創建播放器專用子帳號及其AccessKey:

  • 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進行播放器的開發:

  1. 創建AliVcMediaPlayer播放接口。
  2. 注冊事件通知函數。
  3. 設置缺省解碼方式:如果缺省為硬解,會嚐試使用硬解,如果失敗使用軟解;如果缺省為軟解,那麼會一直使用軟解。
  4. 如果從曆史起點播放,那麼調用seek方法。
  5. 調用prepareAndPlay準備開始播放。

demo示例

在SDK中提供了Demo,此Demo是用播放器SDK開發了一個完整的視頻播放器,用戶可以參考Demo進行播放器的開發。

下麵給出了部分重要的Demo中調用SDK的代碼。

一、應用啟動的時候,給播放器類執行初始化工作

  1. AliVcMediaPlayer.init(getApplicationContext(), businessId, new AccessKeyCallback() {
  2. public AccessKey getAccessToken() {
  3. return new AccessKey(accessKeyId, accessKeySecret);
  4. }
  5. });

二、創建播放器,準備視頻播放:

  1. //1. 創建播放器
  2. mPlayer = new AliVcMediaPlayer(context,surfaceView);
  3. //2. 注冊事件通知
  4. mPlayer.setPreparedListener(new VideoPreparedListener());
  5. mPlayer.setErrorListener(new VideoErrorListener());
  6. mPlayer.setInfoListener(new VideoInfolistener());
  7. mPlayer.setSeekCompleteListener(new VideoSeekCompletelistener());
  8. mPlayer.setCompletedListener(new VideoCompletelistener());
  9. mPlayer.setVideoSizeChangeListener(new VideoSizeChangelistener());
  10. mPlayer.setBufferingUpdateListener(new VideoBufferUpdatelistener());
  11. //3. 設置缺省編碼類型:0表示硬解;1表示軟解;
  12. mPlayer.setDefaultDecoder(0);
  13. //4. 如果從曆史點開始播放
  14. mPlayer.seekTo(position);
  15. //5. 準備開始播放
  16. mPlayer.prepareAndPlay(msURI.toString());

三、準備完成事件通知中:

  1. private class VideoPrepareListener implements AliVcMediaPlayer.MediaPlayerPreparedListener{
  2. @Override
  3. public void onPrepared() {
  4. //更新視頻總進度
  5. } }

四、錯誤事件通知中:

  1. private class VideoErrorListener implements AliVcMediaPlayer.MediaPlayerErrorListener {
  2. public void onError(int what, int extra) {
  3. switch(what)
  4. {
  5. case MediaPlayer.ALIVC_ERR_ILLEGALSTATUS:
  6. // 非法狀態!
  7. break;
  8. case MediaPlayer.ALIVC_ERR_NO_NETWORK:
  9. //report_error("視頻資源或網絡不可用!", true);
  10. break;
  11. case MediaPlayer.ALIVC_ERR_INVALID_INPUTFILE:
  12. //視頻資源或網絡不可用!
  13. break;
  14. case MediaPlayer.ALIVC_ERR_NO_SUPPORT_CODEC:
  15. //無支持的解碼器!
  16. break;
  17. case MediaPlayer.ALIVC_ERR_FUNCTION_DENY:
  18. //無此操作權限!
  19. break;
  20. case MediaPlayer.ALIVC_ERR_UNKNOWN:
  21. //未知錯誤!
  22. break;
  23. case MediaPlayer.ALIVC_ERR_NOTAUTH:
  24. //未鑒權!
  25. break;
  26. case MediaPlayer.ALIVC_ERR_READD:
  27. //資源訪問失敗!
  28. break;
  29. default:
  30. //播放器錯誤!
  31. break;
  32. }
  33. }
  34. }

五、播放信息事件通知中:

  1. private class VideoInfolistener implements AliVcMediaPlayer.MediaPlayerInfoListener {
  2. public int onInfo(int what, int extra){
  3. switch (what)
  4. {
  5. case MediaPlayer.MEDIA_INFO_UNKNOW:
  6. // 未知
  7. break;
  8. case MediaPlayer.MEDIA_INFO_BUFFERING_START:
  9. // 開始緩衝
  10. break;
  11. case MediaPlayer.MEDIA_INFO_BUFFERING_END:
  12. // 結束緩衝
  13. break;
  14. case MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START:
  15. // 首幀顯示時間
  16. break;
  17. }
  18. return 0;
  19. }
  20. }

播放器可配置參數與可選功能

配置參數接口 用途描述
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

  1. public static void init(Context context, String
  2. 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

  1. public void setDefaultDecoder(int decoderType);`

功能:設置默認的解碼器。

參數:

type: 解碼器類型。0代表硬件解碼器;1代表軟件解碼器。

備注:默認為軟件解碼。由於android手機硬件適配性的問題,很多android手機的硬件解碼會有問題,所以,我們建議盡量使用軟件解碼。

setMuteMode

  1. public void setMuteMode(boolean on);

功能:設置播放器是否靜音。

備注:靜音指播放器的靜音,並不會影響係統音量。

setScalingMode

  1. public void setVideoScalingMode(VideoScalingMode scalingMode);
  2. enum VideoScalingMode
  3. {
  4. VIDEO_SCALING_MODE_SCALE_TO_FIT(0),
  5. VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING(1)
  6. };

功能:設置播放器渲染時的縮放模式,目前有兩種模式,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();

功能:獲取實時性能數據。

備注:返回的性能參數包含:

  1. "dec-fps":視頻解碼 fps
  2. "out-fps":視頻渲染 fps
  3. "select-v":視頻流 index
  4. "select_a":音頻流 index
  5. "v-dec":視頻解碼器名稱
  6. "a-dec":音頻解碼器名稱
  7. "vcache-dur":視頻緩衝時長,單位秒
  8. "acache-dur":音頻緩衝時長,單位秒
  9. "vcache-bytes":視頻緩衝大小,單位 byte
  10. "acache-bytes":音頻緩衝大小,單位 byte
  11. "vcache-pkts":視頻緩衝幀數
  12. "acache-pkts":音頻緩衝幀數

AliVcMediaPlayer

MediaPlayer的實現類。

MediaPlayerPrepareListener

當調用prepareAsync後,視頻準備完成後會發送準備完成事件,用戶需要注冊該事件,以便獲取到該事件通知,在準備完成後調用start接口進行視頻播放。

  1. public interface MediaPlayerPrepareListener {
  2. void onPrepared();
  3. }

MediaPlayerCompletedListener

當視頻播放完成後,會發出該事件通知消息,用戶需要注冊該事件,在播放完成後完成相關清理工作。

  1. public interface MediaPlayerCompletedListener {
  2. void onCompleted();
  3. }

MediaPlayerInfoListener

當視頻開始播放,用戶需要知道視頻的相關信息,可以注冊該事件。

  1. public interface MediaPlayerInfoListener{
  2. void onInfo(int what, int extra);
  3. }

參數:

what:獲取到的播放信息或警告的類型.播放的相關信息有:

• MEDIA_ INFO_ UNKNOW:未知信息

• MEDIA_ INFO_ BUFFERING_ START:當開始緩衝時,收到該信息

• MEDIA_ INFO_ BUFFERING_ END:緩衝結束時收到該信息

extra:對播放信息的額外表述。

MediaPlayerErrorListener

當視頻播放出現錯誤後,會發出該事件通知消息,用戶需要注冊該事件通知,以便在出現錯誤後給出相關錯誤提示。

  1. public interface MediaPlayerErrorListener {
  2. void onError(int what, int extra);
  3. }

參數:

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跳轉後,會發出該事件通知消息,用戶注冊該事件通知後,能收到跳轉完成通知。

  1. public interface MediaPlayerSeekCompleteListener {
  2. void onSeekCompleted();
  3. }

MediaPlayerBufferingUpdateListener

當網絡下載速度較慢來不及播放時,會發送下載緩衝進度通知。

  1. public interface MediaPlayerBufferingUpdateListener {
  2. void onBufferingUpdateListener(int percent);
  3. }

參數:

percent: 目前視頻緩衝的進度,範圍為0-100,100代表緩衝完成,0代表緩衝開始。

MediaPlayerVideoSizeChangeListener

當視頻播放時視頻大小改變後,會發出該事件通知。

  1. public interface MediaPlayerVideoSizeChangeListener {
  2. void onVideoSizeChange(int width, int height);
  3. }

參數:

width:視頻改變之後的寬度

height:視頻改變之後的高度

版本更新說明

1.0 原始版本,調用硬件的mediaPlayer接口實現

2.0 改用硬件的mediaCodec接口實現

2.1 增加直播秒開功能、緩衝區丟幀策略等。

2.2 支持多實例、支持https、增加靜音功能、添加視頻渲染時的縮放模式

最後更新:2016-11-23 17:16:11

  上一篇:go iOS 推流SDK使用說明__SDK文檔及下載_API及SDK_視頻直播-阿裏雲
  下一篇:go iOS播放器SDK說明__SDK文檔及下載_API及SDK_視頻直播-阿裏雲