# KSYMediaPlayer-Android-SDK **Repository Path**: mirrors_daimajia/KSYMediaPlayer-Android-SDK ## Basic Information - **Project Name**: KSYMediaPlayer-Android-SDK - **Description**: MediaPlayer for android - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-22 - **Last Updated**: 2025-11-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #KSYMediaPlayer-Android-SDK --- ##SDK支持 目前播放器SDK支持的流媒体传输协议有: * RTMP,HTTP,HLS及RTSP(RTP,SDP) 解码基于FFMPEG,音视频格式支持列表如下(以下仅列出常见格式) * MP4,3GP,FLV,TS/TP,RMVB ,MKV,M4V,AVI,WMV ,MKV ##SDK使用说明 ###结构 SDK包含三个工程,其中 * KSYMediaPlayer- 播放器核心Library库 * KSYMediaWidget- 播放器UI-Library库 * KSYMediaDemo- SDK demo app 其中KSYMediaPlayer/libs/目录下,是不同指令集CPU对应的播放器底层so包,分为: * libksyffmpeg.so * libksyplayer.so * libksyrtmp.so * libksyutil.so ###集成 根据用户的需求,可以选择两种方式集成: * 如果仅需要播放器核心库,不需要UI及上层逻辑,那么仅需引入播放器核心库KsyMediaPlayer,其使用方式类似原生Android的MediaPlayer,具体接口文档请参考[javadoc](http://ks3.ksyun.com/doc/index.html) * 如果需要播放器及对应UI,用户需要引入播放器核心库KsyMediaPlayer以及播放器UI库KsyMediaWidget两个library project。在自己的Acitivity中,使用com.ksy.media.widget.MediaPlayerView,实现MediaPlayerView.PlayerViewCallback回调即可,具体代码请参考KSYMediaDemo ###Manifest权限申明 ``` ``` ##功能及API说明 ###DRM说明 客户如果采用直播的形式推流到金山云流媒体服务器,那么可以选择是否采用我们的DRM加密服务。播放器端基于自定义对称加解密算法对关键帧进行解密,播放器支持三种形式获取解密Key,更加安全可靠。 由于请求DRM解密Key的URL参数中存在我们的鉴权签名信息(signature),出于安全性考虑,用户可以自行选择以下三种模型之一来获取Key。 无论使用哪种模型,app开发者都需要实现IDRMRetriverRequest两个接口⽅法,这些接⼝⽅法都在线程池执行,用户无需开启新的线程。 1.app提供AK,sk完成签名,并且提供完整取Key URL的方式(不安全,建议仅测试时使用) ![](http://eflakee.kssws.ks-cdn.com/drm01.png) ``` //这种本地签名,生成完整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; } ``` 2.app提供不存放AK,SK,app从appserver获取drm完整url,之后再从ksyserver获取drm ![](http://eflakee.kssws.ks-cdn.com/drm02.png) ``` //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; } ``` 3.app提供不存放AK,SK,由appserver访问ksyserver获取drm后返回给APP ![](http://eflakee.kssws.ks-cdn.com/drm03.png) ``` //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; } ``` KSY Server获取解密KEY的接口如下所示: ####请求解密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
** ``` c1cbf122374d55bba69595f0f58d5c80 ``` **错误响应示例: HTTP/1.1 400 Bad Request
Content-Length: length
Content-Type: text/plain
Date: Wed, 28 Oct 2009 22:32:00 GMT
Server: Nginx
** ``` BadParams Expire must be a number ``` 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接口 ``` ###错误码对应表
错误码 错误类型 描述
10000 ERROR_UNKNOWN 未知错误
10001 ERROR_IO IO错误
10002 ERROR_TIMEOUT 请求超时
10003 ERROR_UNSUPPORT 不支持的格式
10004 ERROR_NOFILE 文件不存在
10005 ERROR_SEEKUNSUPPORT 当前不支持seek
10006 ERROR_SEEKUNREACHABLE 当前seek不可达
10007 ERROR_DRM DRM出错
10008 ERROR_MEM 内存溢出
10009 ERROR_WRONGPARAM 参数错误