android的MediaPlayer:KSYMediaPlayer-Android-SDK
SDK支持
目前播放器SDK支持的流媒體傳輸協議有:
- RTMP,HTTP,HLS及RTSP(RTP,SDP) </ul>
- MP4,3GP,FLV,TS/TP,RMVB ,MKV,M4V,AVI,WMV ,MKV </ul>
- KSYMediaPlayer- 播放器核心Library庫
- KSYMediaWidget- 播放器UI-Library庫
- KSYMediaDemo- SDK demo app </ul>
- libksyffmpeg.so
- libksyplayer.so
- libksyrtmp.so
- libksyutil.so </ul>
-
如果僅需要播放器核心庫,不需要UI及上層邏輯,那么僅需引入播放器核心庫KsyMediaPlayer,其使用方式類似原生Android的MediaPlayer,具體接口文檔請參考javadoc
</li> -
如果需要播放器及對應UI,用戶需要引入播放器核心庫KsyMediaPlayer以及播放器UI庫KsyMediaWidget兩個 library project。在自己的Acitivity中,使用com.ksy.media.widget.MediaPlayerView,實現 MediaPlayerView.PlayerViewCallback回調即可,具體代碼請參考KSYMediaDemo
</li> </ul>Manifest權限申明
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
功能及API說明
DRM說明
客戶如果采用直播的形式推流到金山云流媒體服務器,那么可以選擇是否采用我們的DRM加密服務。播放器端基于自定義對稱加解密算法對關鍵幀進行解密,播放器支持三種形式獲取解密Key,更加安全可靠。
由于請求DRM解密Key的URL參數中存在我們的鑒權簽名信息(signature),出于安全性考慮,用戶可以自行選擇以下三種模型之一來獲取Key。無論使用哪種模型,app開發者都需要實現IDRMRetriverRequest兩個接口?法,這些接??法都在線程池執行,用戶無需開啟新的線程。
1.app提供AK,sk完成簽名,并且提供完整取Key URL的方式(不安全,建議僅測試時使用)
//這種本地簽名,生成完整url的?方式 ,需要APP 保存AK ,SK ,計算簽名無需用戶實現,也不需要通過用戶server //接口調用方法: public DRMKey retriveDRMKeyFromAppServer(String cekVersion,String cekUrl){ return null; }
//返回null就可以 public DRMFullURL retriveDRMFullUrl(String cekVersion,String cekUrl) throwsException{ DRMFullURLfullURL= new DRMFullURL("@AK" , "@SK" ,cekUrl, cekVersion); return fullURL; }</pre> <p>2.app提供不存放AK,SK,app從appserver獲取drm完整url,之后再從ksyserver獲取drm </p>
//app攜帶cekURL和cekVersion信息去appserver獲取完整drm路徑之后,再請求ksyserver獲取DRM,開發者只需要實現 public DRMFullURL retriveDRMFullUrl(String cekVersion,String cekUrl)throws Exception{ //發送http請求,從appserver獲取drmurl,之后將url拆解成DRMFullURL對象 returnfullURL; }
public DRMKey retriveDRMKeyFromAppServer(String cekVersion,String cekUrl){ return null; }</pre> <p>3.app提供不存放AK,SK,由appserver訪問ksyserver獲取drm后返回給APP </p>
//app攜帶cekURL和cekVersion信息發送給appserver,appserver生成完整url之后去ksy服務器獲取完整drm之后返回給app,開發者只需要實現 public DRMFullURL retriveDRMFullUrl(String cekVersion,String cekUrl)throws Exception{ DRMFullURL fullURL= new DRMFullURL(cekUrl,cekVersion) return fullURL; //直接將參數返回即可 }
public DRMKey retriveDRMKeyFromAppServer(String cekVersion,String cekUrl){ //開發者需要在這里構建 http請求appserver獲取drm return DRMKey; }</pre> <p>KSY Server獲取解密KEY的接口如下所示: </p>
請求解密Key接口
GET NewCek
此GET為cek-url創建一個cek密鑰串(16進制), 并返回此cek
HTTP/1.1 GET /xiaoyi/NewCek?signature=Wq4VjoEnqbldJe6HfRyTkRavcRg=&accesskeyid=8oN7siZgTOSFHft0cXTg&expire=1710333224&nonce=466cc944cdd58b9d&cekurl=rtmp://live.ksyun.com/xiaoyi/ipc1 Host: drm.ksyun.com
Date: Wed, 28 Oct 2009 22:32:00 GMT請求參數描述:
signature:使用ks3頒發的AK,SK對數據進?行簽名
accesskeyid:ks3頒發的AK.
expire:對應于本次請求的超時時間. 本地計算簽名超時時間當前UTC時間 + 3600秒
nonce:相當于本次請求的UID.本地計算簽名隨機數為expire
resource:camera對應的URL
version:DRM版本號,播放器提供
成功響應示例:
HTTP/1.1 200 OK
Content-Length: length
Content-Type: text/plain
Date: Wed, 28 Oct 2009 22:32:00 GMT
Server: Nginx
<?xml version="1.0" encoding="UTF-8"?> <Result> <Cek>c1cbf122374d55bba69595f0f58d5c80</Cek> </Result>
錯誤響應示例: HTTP/1.1 400 Bad Request
Content-Length: length
Content-Type: text/plain
Date: Wed, 28 Oct 2009 22:32:00 GMT
Server: Nginx
<?xml version="1.0" encoding="UTF-8"?> <Error> <Code>BadParams</Code> <Message>Expire must be a number</Message> </Error>
app開發者需要實現IDRMRetriverRequest兩個接口方法,兩個接口方法都在線程池執行,無需開啟新的線程
public abstract DRMFullURL retriveDRMFullUrl(String cekVersion,StringcekUrl)throws Exception; //獲取drm的url完整路徑,如上url實例 //方案1:如果直接返回 DRMFullURLfullURL=newDRMFullURL("@AK" ,"@SK" ,cekUrl,cekVersion); //默認采?本地?成url?式直接從ksy務器獲取drm
//retriveDRMKeyFromAppServer無需實現//方案2:如果AKSK存放在appserver,那么這個接口方法開發者需要執行http請求訪問appserver獲取drm的完整路徑,并且將url的各項參數拆解成DRMFullURL,returnDRMFullURLfullURL=newDRMFullURL(kSCDRMHostPort,customerName, drmMethod,signature,accessKey,expire,noce,cekUrl,version); //retriveDRMKeyFromAppServer接口方法就無需實現。 //方案3:如果直接返回DRMFullURLfullURL= new DRMFullURL(cekUrl,cekVersion);那么就采用第三種方式,在appserver生成完整url,并且由appserver訪問ksyserver獲取drm之后直接返回給app,retriveDRMKeyFromAppServer 接口就需要開發者實現從appserver獲取drm接口</pre><br />
錯誤碼對應表
錯誤碼 錯誤類型 描述 </tr>10000 ERROR_UNKNOWN 未知錯誤 </tr>10001 ERROR_IO IO錯誤 </tr>10002 ERROR_TIMEOUT 請求超時 </tr>10003 ERROR_UNSUPPORT 不支持的格式 </tr>10004 ERROR_NOFILE 文件不存在 </tr>10005 ERROR_SEEKUNSUPPORT 當前不支持seek </tr>10006 ERROR_SEEKUNREACHABLE 當前seek不可達 </tr>10007 ERROR_DRM DRM出錯 </tr>10008 ERROR_MEM 內存溢出 </tr>10009 ERROR_WRONGPARAM 參數錯誤 </tr> </tbody> </table>
https://github.com/ks3sdk/KSYMediaPlayer-Android-SDK本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!相關經驗
相關資訊
sesese色
解碼基于FFMPEG,音視頻格式支持列表如下(以下僅列出常見格式)
SDK使用說明
結構
SDK包含三個工程,其中
其中KSYMediaPlayer/libs/目錄下,是不同指令集CPU對應的播放器底層so包,分為:
集成
根據用戶的需求,可以選擇兩種方式集成: