Table of Contents 简介快速运行 Demo 项目集成云点播云直播视频下载应用混淆类参考常见问题更新说明

Similar documents
Table of Contents SDK 简介文档版本说明阅读对象支持系统版本整体结构图播放器 VideoView 关系图播放器 Player 关系图 SDK 名词解释播放器功能篇支持播放的格式 SDK 接入篇云点播云直播视频下载应用混淆全景功能解析水印功能使用播放器状态篇应用白名单 FAQ\(

什么是乐视云播放 SDK 乐视云播放 SDK 是基于 Android 4.1 及以上版本设备提供的云视频服务接口 依托于强大的乐视云网络视频应用平台, 您可以使用该 SDK 开发内容丰富的 Android 端移动视频应用 乐视云 SDK 支持的业务如下 : 移动直播

Table of Contents SDK 简介文档版本说明阅读对象支持系统版本整体结构图播放器 VideoView 关系图播放器 Player 关系图 SDK 名词解释播放器功能篇支持播放的格式 SDK 接入篇云点播云直播视频下载应用混淆全景功能解析水印功能使用播放器状态篇应用白名单 FAQ\(

目录 一 功能介绍 功能列表 使用限制...3 二 Android studio 如何导入 SDK SDK 文件结构 导入必要文件 工程配置...6 三 调用 SDK 初始化 如何开始预览...1

Android Service

DU Ad Platform_SDK 安卓接入指南 DU Ad Platform_SDK for Android 接入手册 ( 触发式广告 ) DUAd_SDK_Trigger v1.0 百度在线网络技术 ( 北京 ) 有限公司 百度在线网络技术 ( 北京 ) 有限公司 - 1 -

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

_banneradview.settest(true); _banneradview.setuserkeywords("swimming"); _banneradview.setusercategories("1,3,4"); _banneradview.setusergender(jdbanner

多媒體應用 13 新增專案並完成版面配置 <ExMusic01> <activity_main.xml> ImageView ID imgplay ImageView ID imgstop ImageView ID imgfront TextView ID txtsong TextView ID t

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

新・解きながら学ぶJava

北京方研矩行科技有限公司 Android SDK 快速接入文档

腾讯社交广告转化追踪 Android SDK 接入说明文档 V1.2

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

掌盟 SoEasy SDK 开发者帮助文档 1. 接入前项目检查 根据游戏接入后出现的问题, 对游戏项目做以下几点要求 : a) AndroidManifest.xml 中 android:targetsdkversion="19" b) 如果 AndroidManifest.xml 有 insta

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

手册 doc

百度xx SDK用户手册

untitled

Microsoft Word - 01.DOC

Android Robert C.C. Huang Oscar F.Y. Liu Peter C.L. Hsieh 2011/03/21

一、

Java

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

清华大学2013年毕业生就业质量报告

幻灯片 1

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

_banneradview.setuserkeywords("swimming"); _banneradview.setusercategories("1,3,4"); _banneradview.setusergender(jdbanneradview.gender_male); _bannera

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

PlayerAPI_v1.0.0

正式发文

手说TTS开发指南

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

百度xx SDK用户手册

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

01_Service

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

DU Ad Platform_SDK Cocos 接入指南 DU Ad Platform_SDK for Cocos 接入手册 DU Cocos SDK v1.0 百度在线网络技术 ( 北京 ) 有限公司 百度在线网络技术 ( 北京 ) 有限公司 - 1 -

EJB-Programming-3.PDF

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

可 Web 编程的NativeUI 设计与实现

EJB-Programming-4-cn.doc

建模与图形思考

epub83-1

ChinaBI企业会员服务- BI企业

新美大酒店开放平台SDK(.NET版)使用说明.pages

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

Microsoft PowerPoint - ch6 [相容模式]

TVS厂商接入流程API文档

mvc

untitled

无类继承.key

PowerPoint 演示文稿

Chapter 9: Objects and Classes

DU Ad Platform_SDK for Android 接 入 手册 Version: DuWeatherSDK_1.1.6 前提 : DuWeather SDK 需要依赖 DU Ad Platform_SDK HW 或 CW ( 含 ) 以上版本 在接 入 DuW

建立Android新專案

基于CDIO一体化理念的课程教学大纲设计

Microsoft Word - ch04三校.doc

概述

untitled

技 术 文 件

百度xx SDK用户手册

國家圖書館典藏電子全文

建模与图形思考

FY.DOC

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

F515_CS_Book.book

基于ECO的UML模型驱动的数据库应用开发1.doc

Microsoft Word - 第3章.doc

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

congyunxu

1. 概述 通过集成讯飞开放统计 SDK 可以跟踪移动应用的用户属性及操作行为, 您可以登入讯飞开放 平台 进入我的语音云 - 我的应用, 开通应用的开放统计服务, 即可查看 下载到 数据处理的结果 阅读如下文档, 您可以在几分钟之内轻松完成集成过程 2. 集成说明 2.

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

itestin 能 干 什 么? itestin 是 云 测 ( 提 供 给 广 大 移 动 应 用 测 试 者 或 者 开 发 者 免 费 使 用 的 一 款 安 卓 UI 自 动 化 测 试 录 制 工 具 ( 目 前 只 支 持 Android 应 用 程 序 的

状 态, 规 划 车 辆 行 驶 路 径, 可 进 入 网 站 充 电 服 务 栏 目 (2) 查 询 位 置 联 系 方 式 营 业 时 间 等 信 息, 可 进 入 网 站 服 务 指 南 栏 目 建 议 您 出 行 前 通 过 易 充 电 互 动 网 站 提 前 了 解 所 经 高 速 快 充


Microsoft Word - BaiduMobAds_MSSP_bd_SDK_android.doc

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 access_token=access_token (http

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

C/C++ - 字符输入输出和字符确认

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

使用MapReduce读取XML文件

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 :

RecyclerView and CardVew

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID

untitled

Mocat

Guava学习之Resources

untitled

CC213

untitled

Android + NFC

untitled

百度xx SDK用户手册

Transcription:

Table of Contents 简介快速运行 Demo 项目集成云点播云直播视频下载应用混淆类参考常见问题更新说明 0 1 2 2.1 2.2 2.3 2.4 3 4 5

简介 文档版本说明 版本号版本说明修改者更新日期 4.2 播放 SDK 文档高林花 2016-08-02 什么是乐视云播放 Android SDK 乐视云播放 SDK 是基于 Android 4.1 及以上版本设备提供的云视频服务接口 依托于强大的乐视云网络视频应用平台, 您可以使用该 SDK 开发内容丰富的 Android 端移动视频应用 乐视云 SDK 支持的业务如下 : 云点播云直播点播视频下载 关于 SDK 接入 在接入 SDK 之前, 请仔细阅读 SDK 文档 文档内容并不是很多, 都是接入所必需的 开发工具 Android 开发工具有很多 在此, 我们推荐开发者使用 AndroidStudio 作为自己的开发工具, 本套开 发指南也是针对 AndroidStudio 开发环境下进行编写的 面向的读者 乐视云 SDK 是提供给具有一定 Android 编程经验的开发者使用 您在使用中, 遇到任何问题, 都可以通 过乐视云支持中心或者 QQ 公测群 (433850758) 反馈给我们 兼容性 1. Android 版本 4.1 及以上 2. CPU 类型支持 armeabi armeabi-v7a arm64-v8a 3. 适配市场主流手机型号

运行 demo 说明 在这里我们介绍一下云点播 demo 在 AndroidStudio 中的运行需要以下几个步骤 : (1) 在官网下载完云点播播放 sdk 完成, 解压后, 工程结构为 --LePlayerSdk 和播放器相关的 sdk 文件 --LePlayerSkin 播放器皮肤 sdk --LePlayerVodDemo 主工程 demo (2) 在 AndroidStudio 环境中, 使用 File->Open, 然后选中 sdk 工程所在路径 (3) 导入工程后, 在 AndroidStudio 中按如下图配置 (4) demo 可以成功运行

项目集成 在 AndroidStudio 中, 把我们的播放 sdk 集成到你的项目中, 需按以下步骤接入, 每个步骤都不可省略 : (1) 创建自己的工程 (2) 将 LePlayerSdk 工程下面的 assets 下面的 arkapsconf.json,sdkconfig.xml 拷贝到你自己工程的 assets 目录下面 (3) 如果使用有皮肤播放 : 直接依赖皮肤工程 LePlayerSkin, 皮肤工程依赖 LePlayerSdk ; 如果使用无皮肤版本, 直接依赖 LePlayerSdk (4) 在工程中的 application 中添加下面代码 : public void oncreate() { super.oncreate(); String processname = getprocessname(this, android.os.process.mypid()); // 设置地域名 LeCloudPlayerConfig.HOST_DEFAULT 代表国内版 int host = LeCloudPlayerConfig.HOST_DEFAULT; if (getapplicationinfo().packagename.equals(processname)) { //CrashHandler 是一个抓取崩溃 log 的工具类 ( 可选 ) CrashHandler.getInstance(this); LeCloudPlayerConfig.setHostType(host); //cde 初始化 LeCloudPlayerConfig.init(getApplicationContext()); // 获取当前进程名字 public static String getprocessname(context cxt, int pid) { ActivityManager am = (ActivityManager) cxt.getsystemservice(context.activity_ser List<RunningAppProcessInfo> runningapps = am.getrunningappprocesses(); if (runningapps!= null) { for (RunningAppProcessInfo procinfo : runningapps) { if (procinfo.pid == pid) { return procinfo.processname; return null; (5) 在工程的 AndroidManifest.xml 中添加所需权限 :

<uses-permission android:name="android.permission.internet" /> <uses-permission android:name="android.permission.access_network_state" /> <uses-permission android:name="android.permission.access_wifi_state" /> <uses-permission android:name="android.permission.write_external_storage" /> <uses-permission android:name="android.permission.read_external_storage" /> <uses-permission android:name="android.permission.mount_unmount_filesystems" /> <uses-permission android:name="android.permission.access_fine_location" /> <uses-permission android:name="android.permission.access_coarse_location" /> <uses-permission android:name="android.permission.modify_audio_settings" /> <uses-permission android:name="android.permission.vibrate" /> <uses-permission android:name="android.permission.read_logs" /> <uses-permission android:name="android.permission.flashlight" /> <uses-permission android:name="android.permission.get_tasks" /> <uses-permission android:name="android.permission.read_phone_state" /> <uses-permission android:name="android.permission.receive_user_present" /> (6) 在工程的 AndroidManifest.xml 中添加服务声明 : <service android:name="com.letvcloud.cmf.mediaservice" android:process=":cmf" /> (7) 如果使用有皮肤播放, 在工程的 AndroidManifest.xml 中添加下面代码 : <activity android:name="com.lecloud.skin.activity.feedbackactivity" android:configchanges="keyboard screensize orientation layoutdirection" android:screenorientation="portrait" android:theme="@android:style/theme.notitlebar" > </activity> (8) 在乐视云官网接入你的应用, 接入步骤如下图 注 : 接入应用之前需要登录乐视云官网, 乐视云登录网址

(9) 在完成上述步骤之后, 开始集成云点播 云直播 说明 播放器的接入方式有三种 (demo 中我们主要介绍无皮肤接入和有皮肤接入 ): (1)IPlayer 层接入, 参考 IVideoView 的无皮肤实现和有皮肤实现 (2)IVideoView 无皮肤播放接入 (3)IVideoView 有皮肤播放接入

云点播功能说明 乐视云点播接口, 可以将您预先上传到乐视云服务器的视频资源, 在 Android 端在线播放 关于视频上传请参考云点播 - 快速使用 SDK 云点播接口使用 1 添加播放器 点播播放器分为有皮肤 ( UIVodVideoView ) 有皮肤全景( UIPanoVodVideoView ) 和无皮肤 ( VodVideoView ) 三种类型 有皮肤的播放器提供视频暂停 视频播放 视频进度控制 清晰度切换 全屏 音量和屏幕亮度控制等实用功能 可根据自身项目选择合适类型播放器 在目标界面代码中, 新建并添加播放器 ( 请勿在布局文件中直接添加播放器 )

private IMediaDataVideoView videoview; protected void oncreate(bundle savedinstancestate) { // 设置窗口透明, 可避免播放器 SurfaceView 初始化时的黑屏现象 getwindow().setformat(pixelformat.translucent); // 视频播放界面, 保持屏幕常亮利于视频观看体验 getwindow().addflags(windowmanager.layoutparams.flag_keep_screen_on); super.oncreate(savedinstancestate); setcontentview(r.layout.video_play); // videocontainer 作为视频播放器的容器使用 RelativeLayout videocontainer = (RelativeLayout) findviewbyid(r.id.videocontainer); // 无皮肤播放器请初始化 VodVideoView // videoview = new VodVideoView(this); // 有皮肤播放器请初始化 UIVodVideoView videoview = new UIVodVideoView(this)); // 有皮肤全景播放器请初始化 UIPanoVodVideoView //videoview = new UIPanoVodVideoView(this)); // 将播放器添加到容器中 // 在这儿, 我们使用的是 16:9 的比例适配播放器界面 // 详细请参考 Demo 工程 PlayActivity 布局添加播放器时的 param 配置 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); videocontainer.addview((view) videoview, params); video_play 布局文件内容如下 : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/videocontainer" android:layout_width="match_parent" android:layout_height="203dp" > </RelativeLayout> 2 播放器参数配置 1. 通过 Url 播放视频的参数配置

// Url 可以是在线视频, 也可以是本地视频 // String playpath = "/sdcard/demo.mp4" String playpath = "http://cache.utovr.com/201601131107187320.mp4"; videoview.setdatasource(playpath); 2. 通过 UUID 和 VUID 播放视频配置 String uuid = "e0bd16c57a"; String vuid = "2276b51876"; String pu = "0"; Bundle mbundle = new Bundle(); // 配置播放类型为点播 mbundle.putint(playerparams.key_play_mode, PlayerParams.Value.PLAYER_VOD); // UUID 和 VUID 配置 mbundle.putstring(playerparams.key_play_uuid, uuid); mbundle.putstring(playerparams.key_play_vuid, vuid); mbundle.putstring(playerparams.key_play_pu, pu); videoview.setdatasource(mbundle); UUID 和 VUID 的值可以通过如下方法获取 3 开始播放 处理播放器回调事件 VideoViewListener videoviewlistener = new VideoViewListener() { public void onstateresult(int event, Bundle bundle) { handleplayerevent(event, bundle);// 处理播放器事件 ; videoview.setvideoviewlistener(videoviewlistener); handleplayerevent 的实现为 :

/** * 处理播放器本身事件, 具体事件可以参见 IPlayer 类 */ private void handleplayerevent(int state, Bundle bundle) { switch (state) { case PlayerEvent.Play.PREPARED: // 播放器准备完成, 此刻调用 start() 就可以进行播放了 if (videoview!= null) { videoview.onstart(); break; default: break; 4 处理播放器的生命周期 protected void onresume() { super.onresume(); videoview.onresume(); protected void onpause() { super.onpause(); videoview.onpause(); protected void ondestroy() { super.ondestroy(); if (videoview!= null) { videoview.ondestroy(); // 在 AndroidManifest.xml 中 Activity 申明时, 需要添加配置 //android:configchanges="keyboard screensize orientation layoutdirection", 以使该回调方法生 public void onconfigurationchanged(configuration newconfig) { super.onconfigurationchanged(newconfig); if (videoview!= null) { videoview.onconfigurationchanged(newconfig);

如果你完全按上述步骤集成点播功能, 那么点播就可以正常播放了 如果你还有什么疑问, 都可以通 过乐视云支持中心反馈给我们, 我们会及时为您解答, 也会将您所提出的具有代表性的问题放到常见 问题里

云直播功能说明 乐视云直播, 可将您通过网页或嵌入式智能设备上传的直播视频流进行在线播放 具体如何创建云直播活动, 请参考云直播 - 快速使用 SDK 云直播接口使用 1 添加播放器 直播播放器分为有皮肤 ( UIActionLiveVideoView ) 有皮肤全景( UIPanoActionLiveVideoView ) 和无皮肤 ( ActionLiveVideoView ) 三种类型 有皮肤的播放器提供视频暂停 视频播放 直播时移 清晰度切换 全屏 音量和屏幕亮度控制等实用功能 可根据自身项目选择合适类型播放器 在目标界面代码中, 新建并添加播放器 ( 请勿在布局文件中直接添加播放器 )

private IMediaDataVideoView videoview; protected void oncreate(bundle savedinstancestate) { // 设置窗口透明, 可避免播放器 SurfaceView 初始化时的黑屏现象 getwindow().setformat(pixelformat.translucent); // 视频播放界面, 保持屏幕常亮利于视频观看体验 getwindow().addflags(windowmanager.layoutparams.flag_keep_screen_on); super.oncreate(savedinstancestate); setcontentview(r.layout.video_play); // videocontainer 作为视频播放器的容器使用 RelativeLayout videocontainer = (RelativeLayout) findviewbyid(r.id.videocontainer); // 无皮肤播放器请初始化 ActionLiveVideoView // videoview = new ActionLiveVideoView(this); // 有皮肤播放器请初始化 UIActionLiveVideoView videoview = new UIActionLiveVideoView(this)); // 有皮肤全景播放器请初始化 UIPanoActionLiveVideoView //videoview = new UIPanoActionLiveVideoView(this)); // 将播放器添加到容器中 // 在这儿, 我们使用的是 16:9 的比例适配播放器界面 // 详细请参考 Demo 工程 PlayActivity 布局添加播放器时的 param 配置 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); videocontainer.addview((view) videoview, params); video_play 布局文件内容如下 : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/videocontainer" android:layout_width="match_parent" android:layout_height="203dp" > </RelativeLayout> 2 播放器参数配置 1. 通过 ActionId 播放视频配置

String mactionid = "A2016062700000gx"; //musehls = true, 表示使用 hls 协议播放 ;musehls = false, 表示使用 rtmp 协议播放 ; // 默认使用 rtmp 协议播放 private boolean musehls = false; String pu = "0"; Bundle mbundle = new Bundle(); // 配置播放类型为活动直播 mbundle.putint(playerparams.key_play_mode, PlayerParams.Value.PLAYER_ACTION_LIVE); // ActionId 配置 mbundle.putstring(playerparams.key_play_actionid,mactionid); mbundle.putboolean(playerparams.key_play_usehls,musehls); mbundle.putstring(playerparams.key_play_pu, pu); videoview.setdatasource(mbundle); ActionId 的值可以通过如下方法获取 3 开始播放 处理播放器回调事件 VideoViewListener videoviewlistener = new VideoViewListener() { public void onstateresult(int event, Bundle bundle) { handleplayerevent(event, bundle);// 处理播放器事件 ; videoview.setvideoviewlistener(videoviewlistener); handleplayerevent 的实现为 :

/** * 处理播放器本身事件, 具体事件可以参见 IPlayer 类 */ private void handleplayerevent(int state, Bundle bundle) { switch (state) { case PlayerEvent.Play.PREPARED: // 播放器准备完成, 此刻调用 start() 就可以进行播放了 if (videoview!= null) { videoview.onstart(); break; default: break; 4 处理播放器的生命周期 protected void onresume() { super.onresume(); videoview.onresume(); protected void onpause() { super.onpause(); videoview.onpause(); protected void ondestroy() { super.ondestroy(); if (videoview!= null) { videoview.ondestroy(); // 在 AndroidManifest.xml 中 Activity 申明时, 需要添加配置 android:configchanges="keyboard screen public void onconfigurationchanged(configuration newconfig) { super.onconfigurationchanged(newconfig); if (videoview!= null) { videoview.onconfigurationchanged(newconfig);

如果你完全按上述步骤集成云直播功能, 那么云直播就可以正常播放了 如果你还有什么疑问, 都可 以通过乐视云支持中心反馈给我们, 我们会及时为您解答, 也会将您所提出的具有代表性的问题放到 常见问题里

点播视频下载功能说明 下载模块和乐视云点播业务搭配使用, 可以下载云点播视频到 SD 卡上, 方便用户在无法使用网络的情况下观看视频 点播视频下载接口使用接入步骤如下 : DEMO 中的下载模块案例在 DownloadActivity 中 这里以下载一个点播视频为例进行讲解, 快速对接步骤如下 : // 定义 uuid vuid private String uuid = "3a9d21720d"; private String vuid = "f524458b4f"; // 定义下载列表对象参考类 LeDownloadInfo private List<LeDownloadInfo> mdownloadinfos; // 定义 DownloadCenter 对象, 这个对象就是对视频下载类的封装,DownloadCenter 对象全局只有一个 private DownloadCenter mdownloadcenter; // 实现 LeDownloadObserver 对象,observer 主要用于监听下载过程中的各状态的改变 LeDownloadObserver observer = new LeDownloadObserver() { public void ondownloadsuccess(ledownloadinfo info) { // 下载成功 public void ondownloadstop(ledownloadinfo info) { // 下载暂停 public void ondownloadstart(ledownloadinfo info) { // 开始下载 public void ondownloadprogress(ledownloadinfo info) { // 下载进度通知

public void ondownloadfailed(ledownloadinfo info, String msg) { // 下载失败 public void ondownloadcancel(ledownloadinfo info) { // 取消下载 public void ondownloadinit(ledownloadinfo info, String msg) { // 下载初始化 public void ondownloadwait(ledownloadinfo info) { // 当请求视频的 url 成功时, 回调这个方法, 表示开始等待下载 ; public void ongetvideoinforate(ledownloadinfo info, List<String> rates) { // 获取你当前下载视频的码率 ( 比如标清 高清 原画等等 ) protected void oncreate(bundle savedinstancestate) { // 实例化 DownloadCenter 对象 mdownloadcenter = DownloadCenter.getInstances(this.getApplicationContext()); // 向 DownloadCenter 注册 observer; // 一个 DownloadCenter 可以注册多个 observer, 事件会通知每一个 observer; mdownloadcenter.registerdownloadobserver(observer); // 获取所有添加到下载列表中的视频 这里需要注意 : 获取到的列表包括未开始 // 正在下载 已完成 失败等所有状态的视频 mdownloadinfos = mdownloadcenter.getdownloadinfolist(); // 点击下载按钮后调用该方法 mdownloadcenter.downloadvideo("", uuid, vuid); // 点击下载按钮后, 如果不调用 mdownloadcenter.downloadvideo("", uuid,vuid); // 则可以调用该方法, 建议使用该方法 LeDownloadInfo info = new LeDownloadInfo(); info.setuu(uuid); // 必填, 否则不能下载视频 info.setvu(vuid); // 必填, 否则不能下载视频 mdownloadcenter.downloadvideo(info);

protected void ondestroy() { super.ondestroy(); if (mdownloadcenter!= null) { mdownloadcenter.unregisterdownloadobserver(observer); 关于视频下载的快速接入, 写入上述代码即可完成, 下面是关于接口和实体类的详细描述 interface LeDownloadObserver 属性 值 说明 int DOWLOAD_STATE_WAITING 0 下载状态 -- 等待中 int DOWLOAD_STATE_DOWNLOADING 1 下载状态 - 下载中 int DOWLOAD_STATE_STOP 2 下载状态 - 下载暂停 int DOWLOAD_STATE_SUCCESS 3 下载状态 - 下载成功 int DOWLOAD_STATE_FAILED 4 下载状态 - 下载失败 int DOWLOAD_STATE_NO_DISPATCH 5 当前视频已经添加到下载队列, 但是没有开始调度 int DOWLOAD_STATE_URL_REQUEST_FAILED 6 视频 url 地址请求失败 int DOWLOAD_STATE_NO_PERMISSION 7 没有权限下载 int DOWLOAD_STATE_DISPATCHING 8 正在调度中 int DOWLOAD_STATE_CANCEL 10 下载状态 - 下载取消

method 说明 void ondownloadstart(ledownloadinfo info) void ondownloadprogress(ledownloadinfo info) void ondownloadstop(ledownloadinfo info) void ondownloadsuccess(ledownloadinfo info) void ondownloadfailed(ledownloadinfo info, String msg) void ondownloadcancel(ledownloadinfo info) void ondownloadinit(ledownloadinfo info, String msg) void ondownloadwait(ledownloadinfo info) void ongetvideoinforate(ledownloadinfo info, List rates) 开始下载 下载进度更新 下载暂停 下载完成 下载失败 取消下载 下载初始化 等待下载 获取你当前下载视频的码率 ( 比如标清 高清 原画等等 ) class DownloadCenter

method DownloadCenter getinstances(context context) void downloadvideo(string userkey, String uu, String vu) downloadvideo(string userkey, String uu, String vu,string ratetext) void downloadvideo(ledownloadinfo info) void allowshowmsg(boolean b) void setdownloadsavepath(string path) void setdownloadratetext(string text) List getdownloadinfolist() int getdownloadinfosize() void setmaxdownloadthread(int mmaxdownloadthread) void resumedownload(ledownloadinfo downloadinfo) void stopdownload(ledownloadinfo downloadinfo) void retrydownload(ledownloadinfo downloadinfo) void stopalldownload() void canceldownload(ledownloadinfo downloadinfo, boolean isdeletefile) LeDownloadInfo finddownloadinfo(string vu) String getdownloadfilepath(string vu) boolean isdownloadcompleted(string vu) void registerdownloadobserver(ledownloadobserver observer) void unregisterdownloadobserver(ledownloadobserver observer) 说明 单例模式, 获取 DownloadCenter 对象 下载视频 (3.0 已有的接口 ),userkey 可以为空,uu vu 必填 下载视频 (3.0 已有的接口 ), 已过期, 不建议使用这种方式 推荐使用这种方式, 参考 LedownloadInfo 下载过程是否显示 toast 提示,ture 提示,false 不提示 设置本地视频文件保存路径 设置当前视频的默认下载码率 返回所有的下载任务列表, 包括未开始 正在下载 下载完成 失败等所有的列表 获取下载任务的数量 设置同时下载的最大线程数, 建议值 1~5, 最大线程数, 默认为 3 恢复视频下载 暂停当前视频的下载 重试下载失败的视频 停止当前所有正在下载的视频 取消下载, 并且如果 isdeletefile = true, 则删除数据库中的信息, 删除本地文件 查找当前 VU 所对应的数据库中的 DownloadInfo 信息 获取当前视频保存的本地路径 查询当前视频是否下载完成 注册下载状态监听的 Observer, 可以注册多个 取消注册状态监听 Observer class LeDownloadInfo 下载过程中需要用到的方法如下 :

method 说明 int getdownloadstate() String getfilename() String getfilesavepath() long getprogress() long getfilelength() String getratetext() 获取当前视频的下载状态获取当前视频文件的名称获取当前视频文件保存的路径获取当前视频的下载进度获取当前视频文件的大小获取当前数据库中保存的视频所对应的码率

应用混淆 如果您的应用用到了混淆, 请在混淆脚本添加如下内容 : -dontwarn cn.mmachina.** -keep class cn.mmachina.** { *; -dontwarn com.letv.adlib.** -keep class com.letv.adlib.** { *; -dontwarn com.lecloud.sdk.** -keep class com.lecloud.sdk.** { *; -dontwarn android.net.compatibility.** -keep class android.net.compatibility.** { *; -dontwarn android.net.http.** -keep class android.net.http.** { *; -dontwarn com.android.internal.http.multipart.** -keep class com.android.internal.http.multipart.** { *; -dontwarn org.apache.commons.** -keep class org.apache.commons.** { *; -dontwarn org.apache.http.** -keep class org.apache.http.** { *; -dontwarn com.lecloud.xutils.** -keep class com.lecloud.xutils.** { *; -dontwarn com.letv.pano.** -keep class com.letv.pano.** { *; -dontwarn android.os.** -keep class android.os.** { *; -dontwarn com.letvcloud.cmf.** -keep class com.letvcloud.cmf.** { *; -dontwarn com.lecloud.sdk.** -keep class com.lecloud.sdk.** { *; -dontwarn cn.com.iresearch.mvideotracker.** -keep class cn.com.iresearch.mvideotracker.** { *; -dontwarn com.letv.controller.tracker.** -keep class com.letv.controller.tracker.** { *;

3 类参考 播放器 View 播放器 View 接口与类的关系图如下 : interface IVideoView

method 说明 int getvideowidth() 获取视频宽 ( 像素 ) int getvideoheight() 获取视频高 ( 像素 ) void onstart() 开始播放 ( 需要在播放器准备完成时调用 ) void onresume() 继续播放 ( 需要在在 Activity 生命周期 onresume 调用 ) void onpause() 暂停播放 ( 需要在在 Activity 生命周期 onpause 调用 ) void ondestroy() void stopandrelease() void setvideoviewlistener(videoviewlistener listener) void onconfigurationchanged(configuration newconfig) void setdatasource(string playurl) boolean isplaying() void seekto(long msec) long getcurrentposition() long getbufferpercentage() long getduration() void setvolume(float leftvolume, float rightvolume) 停止播放并销毁播放器 ( 需要在在 Activity 生命周期 ondestroy 调用 ) 停止播放并释放播放器资源 设置播放器状态回调参考 VideoViewListener 处理屏幕方向改变 ( 需要在 Activity 生命周期 onconfigurationchanged 调用 ) 设置播放地址 Url 视频正在播放 seek 到某个位置播放 获取当前播放位置 获取视频缓冲大小 获取视频时长 设置左右声道 boolean retry() 重新播放 ( 按 Home 键后回来继续播放 ) void setcachewatermark(int hight,int low) void setcachepresize(int pre) void setcachemaxsize(int max) void setmaxdelaytime(int max) 设置高低水位设置起播缓冲值设置最大缓冲值设置最大延时 interface VideoViewListener method void onstateresult(int event,bundle bundle) 说明 播放器状态回调可以处理的事件参考 PlayerEvent PlayerEvent

属性 值 说明 int PLAY_INIT 200 播放器初始化 int PLAY_BUFFERING 201 视频缓冲百分比 int PLAY_COMPLETION 202 播放结束 int PLAY_DECODER_CHANGED 203 解码方式改变 ( 软解和硬解 ) int PLAY_ERROR 205 播放器错误 int PLAY_INFO 206 bundle 获取播放器状态 code <br>= bundle.getint(playerparams.key.result_statu code 有三种状态, 分别是 : 缓冲开始 StatusCode.PLAY_INFO_BUFFERING_STA 缓冲结束 StatusCode.PLAY_INFO_BUFFERING_END 渲染第一帧完成 StatusCode.PLAY_INFO_VIDEO_RENDERING_START int PLAY_LOADINGSTART 207 开始缓冲视频 int PLAY_PREPARED 208 播放器准备完成 int PLAY_SEEK_COMPLETE 209 seek 完成 int PLAY_VIDEOSIZE_CHANGED 210 视频宽高变化的时候触发 int VIEW_PREPARE_VIDEO_SURFACE 8001 收到该事件时, 添加视频播放器 SurfaceView int VIEW_PREPARE_AD_SURFACE 8002 收到该事件时, 添加广告播放器 SurfaceView int MEDIADATA_VOD 6000 处理媒资服务器返回点播对应的数据 int MEDIADATA_LIVE 6001 处理媒资服务器返回直播对应的数据 int MEDIADATA_GET_PLAYURL 6002 处理调度服务器返回 ( 直播 活动直播 ) 对应的数据 int MEDIADATA_ACTION 6003 处理媒资服务器返回活动直播对应的数据 int AD_START 7005 广告开始播放 int AD_COMPLETE 7006 广告播放结束 int AD_PROGRESS 7007 广告播放进度 interface IMediaDataVideoView (extends IVideoView) method void setdatasource(bundle bundle) 说明 设置请求视频需要的参数 播放器 Player

播放器接口与类的关系图如下 : interface IPlayer 播放器的状态, 使用 getstatus() 方法获取

属性 值 说明 int PLAYER_STATUS_INIT 0 播放器初始化 int PLAYER_STATUS_PREPARED 1 播放器准备完成 int PLAYER_STATUS_PLAYING 2 正在播放 int PLAYER_STATUS_PAUSED 3 暂停播放 int PLAYER_STATUS_STOPED 4 停止播放 int PLAYER_STATUS_EOS 5 播放到末尾 int PLAYER_STATUS_ERROR 6 播放错误 method void setonplaystatelistener(onplaystatelistener playstatelistener) void setdisplay(surface surface) void stop() void start() void pause() int getvideowidth() int getvideoheight() boolean isplaying() void seekto(long msec) long getcurrentposition() long getbufferpercentage() long getduration() void reset() void setdatasource(string url) void setvolume(float leftvolume,float rightvolume) int getstatus() boolean suspend() void regain() boolean retry() Object getattribute() 说明 设置播放器事件回调参考 OnPlayStateListener 设置 Surface 停止播放 开始播放 暂停播放 获取视频宽 获取视频高 是否正在播放 播放器 seek 到某一个位置 获取播放器当前播放时间 获取当前缓冲时间 获取视频时长 播放器状态重置 设置播放源 设置音量 获取播放器状态参考上面播放器属性值 播放挂起 恢复播放 重新播放 获取播放器的一些附加属性, 暂时没有使用到 interface OnPlayStateListener

method void videostate(int event,bundle bundle) 说明 可以处理的事件参考 PlayerEvent interface IExPlayer (extends IPlayer) method void setmaxdelaytime(int max) void setcachewatermark(int hight, int low) void setcachemaxsize(int max) void setcachepresize(int pre) void setdecoder(int mode) 设置最大延时单位 :ms 说明 设置高低水位值单位 :ms 设置最大缓冲值单位 :ms 设置起播缓冲值单位 :ms 设置解码方式, 模式有 : 自动 MediaPlayer.DECODER_TYPE_LEC_AUTO 软解 MediaPlayer.DECODER_TYPE_LEC_SOFT 硬解 MediaPlayer.DECODER_TYPE_SYS_HARD interface IAdPlayer (extends IExPlayer) 属性值说明 int AD_PLAY_ERROR 0 广告播放错误 String AD_TIME "AdTime" 作为 Key 键保存广告播放时间 method void setonadplayerlistener(adplayerlistener adplayerlistener) void clickad() 说明 设置广告播放回调事件参考 AdPlayerListener 处理点击广告后事件, 跳转广告对应网页链接 interface AdPlayerListener method void onadplayerevent(int event, Bundle bundle) 说明 可以处理的广告事件参考 PlayerEvent interface IMediaDataPlayer (extends IAdPlayer)

method void setonmediadataplayerlistener(mediadataplayerlistener mediaplayerlistener) void setdatasourcebyrate(string ratetype) void setdatasourcebymediadata(bundle mediadataparams) 说明 设置媒资回调事件参考 MediaDataPlayerListener 设置视频码率 设置请求视频所需参数 interface MediaDataPlayerListener method void onmediadataplayerevent(int event, Bundle bundle) 说明 可以处理的媒资事件参考 MediaData interface IMediaDataLivePlayer (extends IMediaDataPlayer) void seektimeshift(long date) method void registertimeshiftlistener(itimeshiftlistener listener) 说明 设置播放时移单位 :ms 注册时移回调事件参考 ItimeShiftListener interface ItimeShiftListener method void onchange(long servertime, long currenttime, long begin) 说明 三个参数分别是 : 服务器时间, 当前播放时间, 直播开始时间 interface IMediaDataActionPlayer (extends IMediaDataLivePlayer) method void setdatasourcebyliveid(string liveid) void setactionstatuslistener(actionstatuslistener listener) void setonlinepeoplelistener(onlinepeoplechangelistener listener) 说明 设置直播的 liveid 设置活动状态回调参考 ActionStatusListener 设置在线人数变化回调参考 OnlinePeopleChangeListener

常见问题 问 : 需要自定义皮肤, 我应该如何操作? 答 : 我们提供了专门的皮肤工程 playerskin, 皮肤工程是开源的 如果你觉得 SDK 提供的皮肤不符合你的设计, 那么你可以不使用 playerskin 工程, 直接在无皮肤播放上添加自己需要的皮肤样式 问 : 觉得提供的 SDK 过于庞大, 如何能够缩小它? 答 : 通过以下缩减以下的几个步骤, 可以很快的缩小 SDK: 删掉 SDK 自带的皮肤包, 使用自定义皮肤 在 libs 目录下只保留 armeabi_v7a, 删掉其他的目录 现在大多数手机都已经兼容了 armeabi_v7a 其他的 CPU 基本不需要兼容 问 : 第一次创建 SurfaceView 时, 出现黑屏一下的现象 该如何处理? 答 : 在 activity 的 oncreate 方法中加 入 getwindow().setformat(pixelformat.translucent) ; 需要导入包 import android.graphics.pixelformat; 在 fragment 中使用在 getwindow 前加 getactivity() 问 :SDK 中提供了点播 直播和移动直播, 有什么区别, 在什么情况下使用? 答 : 在 SDK 中, 提供了三种播放方式 : 点播 直播和移动直播 : 点播 : 和乐视云计算中的云点播的播放有关 播放点播视频, 需要传入参数 UUID ( 必 须 ) VUID ( 必须 ) 直播 : 直播需要的参数有 action_id ( 活动 ID) use_hls ( 默认走 rtmp 的播放 ) 在直播中支 持时移功能 移动直播 : 移动直播需要的参数 url, 这个可以是在线视频, 也可以是本地视频 问 : 我需要借助 SDK 提供的播放器播放我本地的视频, 这种情况下我应该怎么去播放它? 答 : 提供播放本地视频的接口 player.setdatasource(path), 如果播放本地视频需要关闭服 务代理 playcontext.setuseplayerproxy(false) 如此才能关闭本地视频 问 : 使用乐视 SDK 之后, 出现混淆打包失败的情况, 这样我应该如何处理?

答 : 如果使用乐视 SDK 混淆打包失败, 大多数情况都是对 SDK 进行了再次混淆 乐视 SDK 在提供 时就已经混淆了, 所以在第二次打包时, 我们不建议在对 SDK 进行混淆 问 : 乐视 SDK 引用的 jar 包和项目中已经引用的 jar 包冲突怎么处理? 答 : 当使用乐视 SDK 和其他的 jar 包冲突时 : 比如乐视 SDK 中使用了 gson_2.1 版本, 但是你需要 引用其他的版本 这种情况下请使用乐视 SDK 所提供的 jar 包 问 : 我使用离线下载功能, 结果发现下载的视频被 360 等清理工具清理掉了 这种情况下怎么处理? 答 : 在使用离线下载功能中, 建议最好把下载的视频放到 SD 卡的一个随便目录下, 不要放 在 "android/data/packname/" 目录下 如果放在这个目录下,360 清理工具会检测到这是程序 运行的垃圾, 每次都会自动清理掉 如果视频被自动清理掉,SDK 会在播放时抛给用户这个事 件, 用户如果需要重新下载必须清理掉数据库中的数据 问 : 播放视频过程中, 发现有的视频音视频不同步, 这种现象怎么排查? 答 : 这种情况一般在电视等特别低的 CPU 中出现过, 一般排查步骤有 : 1. 看看视频源, 是不是视频源本身就是音视频不同步 2. 通过浏览器或者 IOS 或者其他手机测试一下, 看看是不是所有的都是这种现象 3. 是不是 CPU 性能太差, 建议使用硬解测试 问 : 使用离线下载功能, 同时添加了很多视频, 结果发现有些视频下载失败了怎么处理? 答 : 1. 使用离线下载功能时, 不要同时开太多的任务, 我们建议最大线程数为 1 3 个, 默认为 3 个 2. 视频能否下载, 需要检测当前视频是不是开启了下载功能 3. 当视频下载失败时, 会回调下载失败的事件, 这时就需要用户点击重试下载 问 : 视频可以跟随手机一起旋转方向, 但是我想实现那种视频单独旋转的特效要如何处理? 就像花椒直播中的横屏效果 答 : 如果想要花椒直播中类似的横屏效果 可以通过 textureview 去处理 然后调 用 setrotation(float rotation) 设置旋转方向 注意 : 旋转后需要自己计算视频宽高 问 : 起播的时候, 听到声音了, 但是过了几秒之后才看到画面 这种情况如何处理?

答 : 这种情况一般在电视等特别低的 CPU 中出现过, 一般排查步骤有 : 1. 看看视频源, 是不是有这种前几秒是先有声音的现象 2. 通过浏览器或者 IOS 或者其他手机测试一下, 看看是不是所有的都是这种现象 3. 如果在 TV 上出现, 很有可能是皮肤问题导致的, 建议使用 4.0 上无皮肤的 SDK 播放测试一下 也可以使用硬解测试 ( 一般默认是软解方式 ) 问 :SDK 能播放点播 直播和活动直播 但是我只想要一个点播 ( 或直播 ) 应该如何处理? 答 : 在我们提供的 SDK 中, 不管是点播 直播还是活动直播, 都使用的是同一套视频的编解码 器 所以单独保留一个功能不会减少 SDK 包的大小 各个功能模块也是独立的, 所以保留其他的 模块不会相互影响 问 : 错误日志 " 鉴权失败 " 和 " 白名单验证未通过 " 答 : 对于新接入的用户或者是使用新的 APP 包名, 需要在乐视云计算官网接入 APP 在填写表单 过程中, 包名必须一致 问 : 接入播放器的时候, 出现 so 库找不到的问题 答 : 在有些手机中, 如果出现 so 库找不到的问题, 需要通过以下三个步骤解决 : 1. 查看当前手机支持的 CPU 型号, 一般需要支持 armeabi_v7a 2. 如果当前手机支持这中类型的编码, 那么看看工程中 libs 目录下是不是包涵其他的型号, 比如 armeabi 或者 arm64 等, 如果存在需要删掉 3. 看看是不是引用的有些 jar 包中打入了其他类型的 so 库

5 更新说明 2016-08-02 新增支持 64 位 cpu 播放更新播放框架, 适配兼容不同手机类型 cpu 播放支持用户后台配置水印图 以及水印显示位置, 配置生效后会在手机端显示修复推流端断流后, 又重新推流, 云直播不能继续播放的问题 2016-06-22 重构并提供全新 API 接口, 更稳定 更易用接入点播 直播 移动直播, 只需要写少量的代码修复在播放一段时间后,cmf 服务进程出现异常断开, 提示 cde 初始化不成功的 bug 修复了以前使用 webview 经过长时间播放后, 可能存在的内存泄漏相比 4.0 版本, 新版本的播放器和皮肤层更独立系统日志上报更详细全面, 出现问题可以迅速定位优化网络请求媒资速度