untitledOURTEAMlinkedinuntitled2untitled3iconuntitled4icon2untitled01020304ourteam-01-2youjian-01hornmaillinkedinTEAMlagou
lingdonglingfenglingkonglingmoulingwulingyuelingzhizhanshiiconfont-jindanluntaniconfont-boke4iconfont-wendang0iconfont-pciconfont-AppleAcciconfont-iconset0290iconfont-iconfontfaqviconfont-touxiangclosenavbar-liveOSVideoOS-OPEN-10navbar-videoAinavbar-videodatanavbar-videoOSasmpnavbar-vmrtnavbar-one1navbar-documentnavbar-faqnavbar-tutorialnavbar-blognavbar-forumvideojj-magicinvideojj-revenueSVD-01vdap-ctrlnavbar-videoOS-titleyouxiBacknavbar-LiveOS-titleicon-hotnavbar-newtop-arrowvpls-product-arrowvpls-product-plusV-MallV+MALL

Web端接入/WEB ACCESS

Video++技术作为互动视频播放器嵌入到视频播放的页面中。您可以根据您的建站方式选择接入模式。

开发者模式

开发者模式适用于直接用代码开发的网站

1.引用JS SDK文件

2.选择播放器容器

3.创建互动层

我们推荐您使用Video++官方最新的CDN地址,可以保证您的播放器更新更加及时。

  1. 引入JS SDK:

    <script type="text/javascript" src="//cytroncdn.videojj.com/latest/cytron.core.js"></script>
    
  2. 新建一个div作为视频播放的窗口,建议div的宽高在640px*480px以上。

  3. 在网页合适位置写入如下代码,并对参数进行相应的设置,即可创建互动视频实例:

    var ivaInstance = new Iva(
    '父容器',//新建一个div作为视频播放的窗口,建议div的宽高在640px*480px以上;
     {
       appkey: '应用标识',//必填,**请在控制台查看应用标识**
       video: '视频地址url',//必填,播放地址(例如:http://v.youku.com/v_show/id_XMTY5NDg2MzY5Ng==.html)
       title: '小视频',//选填,建议填写方便后台数据统计
       cover: '视频封面url',//选填,视频封面url
       vnewsEnable: false,//是否开启新闻推送功能,默认为true
       playerUrl: '', //选填,第三方播放器与Video++互动层的桥接文件,由Video++官方定制提供,默认为空
       videoStartPrefixSeconds: 0,//选填,跳过片头,默认为0
       videoEndPrefixSeconds: 0,//选填,跳过片尾,默认为0
       /* 以下参数可以在“控制台->项目看板->应用管理->播放器设置” >进行全局设置,前端设置可以覆盖全局设置 */
       skinSelect: 0,//选填,播放器皮肤,可选0、1、2,默认为0,
       autoplay: false,//选填,是否自动播放,默认为false
       rightHand: true,//选填,是否开启右键菜单,默认为false
       autoFormat: false,//选填,是否自动选择最高清晰度,默>认为false
       bubble: true,//选填,是否开启云泡功能,默认为true
       jumpStep: 10,//选填,左右方向键快退快进的时间
       tagTrack: false,//选填,云链是否跟踪,默认为false
       tagShow: false,//选填,云链是否显示,默认为false
       tagDuration: 5,//选填,云链显示时间,默认为5秒
       tagFontSize: 16,//选填,云链文字大小,默认为16像素
       editorEnable: true, // 选填,当用户登录之后,是否允许加载编辑器,默认为true
       vorEnable: true, // 选填,是否允许加载灵悟,默认为true
       vorStartGuideEnable: true //选填, 是否启用灵悟新人引导,默认为true
     }
    );
    
  4. 如果要销毁实例,可以调用实例的destroy方法 ivaInstance.destroy();

网站接入/WEB ACCESS

Video++技术作为互动视频播放器嵌入到视频播放的页面中。您可以根据您的建站方式选择接入模式。

如果您直接编写代码建站,请选择开发者模式;如果使用wordpress、织梦、帝国等CMS工具建站,请选用插件模式接入。

开发者模式

开发者模式适用于直接用代码开发的网站

1.引用JS SDK文件

2.选择播放器容器

3.创建互动层

我们推荐您使用Video++官方最新的CDN地址,可以保证您的播放器更新更加及时。

点播模式

  1. 引用资源文件,将脚本文件插入到网页的合适位置:

<script type="text/javascript" src="http://7xjfim.com2.z0.glb.qiniucdn.com/Iva.js"></script>

  1. 新建一个div作为视频播放的窗口,建议div的宽高在640px*480px以上,如果小于此宽高的话,视频会以弹窗形式播放。

  2. 在网页合适位置写入如下代码,并对参数进行相应的设置,即可创建互动视频实例:

    /**
    

    *创建Iva实例,以下参数值是时间的均以秒为单位

    */

    var ivaInstance = new Iva( '父容器',//父容器id或者父容器DOM对象,给父容器设置宽高640px480px以上可以获得最佳的浏览体验; { appkey: '应用标识',//必填,请在控制台查看应用标识 live: false,//选填,是否是直播流,默认为false video: '视频地址url',//必填,播放地址(http://www.tudou.com/programs/view/tM_vZCQy2uM/)或者资源地址(http://7xi4ig.com2.z0.glb.qiniucdn.com/shapuolang_ts.mp4) title: '小视频',//选填,视频标题 cover: '视频封面url',//选填,视频封面url videoStartPrefixSeconds: 0,//选填,跳过片头,默认为0 videoEndPrefixSeconds: 0,//选填,跳过片尾,默认为0 / 以下参数可以在“控制台->项目看板->应用管理->播放器设置”进行全局设置,前端设置可以覆盖全局设置 */ skinSelect: 0,//选填,播放器皮肤,可选0、1、2,默认为0, autoplay: false,//选填,是否自动播放,默认为false rightHand: true,//选填,是否开启右键菜单,默认为false autoFormat: false,//选填,是否自动选择最高清晰度,默认为false bubble: true,//选填,是否开启云泡功能,默认为true jumpStep: 10,//选填,左右方向键快退快进的时间 tagTrack: false,//选填,云链是否跟踪,默认为false tagShow: false,//选填,云链是否显示,默认为false tagDuration: 5,//选填,云链显示时间,默认为5秒 tagFontSize: 16//选填,云链文字大小,默认为16像素 } );

  3. 如果要销毁实例,可以调用实例的destroy方法 ivaInstance.destroy();

直播模式

  1. 引用资源文件,将脚本文件插入到网页的合适位置:

<script type="text/javascript" src="http://7xjfim.com2.z0.glb.qiniucdn.com/Iva.js"></script>

  1. 新建一个div作为直播视频播放的窗口,建议div的宽高在640px*480px以上,如果小于此宽高的话,视频会以弹窗形式播放。

  2. 在网页合适位置写入如下代码,并对参数进行相应的设置,即可创建互动直播视频实例:

    直播模式参数live必须为true
    /**
    

    *创建Iva实例,以下参数值是时间的均以秒为单位

    */

    var ivaInstance = new Iva( '父容器',//父容器id或者父容器DOM对象,给父容器设置宽高640px480px以上可以获得最佳的浏览体验;如果宽高在640px480px以下,Iva会以弹窗形式呈现 { appkey: '应用标识',//必填,请在控制台查看应用标识 live: true,//是否是直播流,默认为false(直播模式为true) video: '视频地址url',//必填,播放地址(http://www.tudou.com/programs/view/tM_vZCQy2uM/)或者资源地址(http://7xi4ig.com2.z0.glb.qiniucdn.com/shapuolang_ts.mp4) title: '小视频',//选填,视频标题 cover: '视频封面url',//选填,视频封面url videoStartPrefixSeconds: 0,//选填,跳过片头,默认为0 videoEndPrefixSeconds: 0,//选填,跳过片尾,默认为0 /* 以下参数可以在“控制台->项目看板->应用管理->播放器设置”进行全局设置,前端设置可以覆盖全局设置 */ skinSelect: 0,//选填,播放器皮肤,可选0、1、2,默认为0, autoplay: false,//选填,是否自动播放,默认为false rightHand: true,//选填,是否开启右键菜单,默认为false autoFormat: false,//选填,是否自动选择最高清晰度,默认为false bubble: true,//选填,是否开启云泡功能,默认为true jumpStep: 10,//选填,左右方向键快退快进的时间 tagTrack: false,//选填,云链是否跟踪,默认为false tagShow: false,//选填,云链是否显示,默认为false tagDuration: 5,//选填,云链显示时间,默认为5秒 tagFontSize: 16//选填,云链文字大小,默认为16像素 } );

  3. 如果要销毁实例,可以调用实例的destroy方法 ivaInstance.destroy();

Flash接入

  1. 1.加载外部SWF到程序中

     var loader:Loader = new Loader();
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler);
     loader.load(new URLRequest("http://flash.videojj.com/bin/videoPlus.swf"));
    

    为了让Video++互动层的用户体验更好,建议将我们放到最上层.

  2. 2.互动层加载成功后初始化参数示例

    		function loadCompleteHandler(e:Event):void
    			{
    
 var videoPlsDS:DisplayObject = loader.content as DisplayObject;
 addChild(videoPlsDS);
 /**
  * 根据传入的object初始化
  * 需要用到的参数有:
  *  width       播放器宽度
  *  height      播放器高度
  *  appkey      应用标识
  *  referer     当前页面的页面地址
  *  source      视频地址(点播时为平台方ID+视频唯一ID 如:"$youtube$123456dsfh"  直播时为平台方ID 如: "zhanqi")
  *  type        播放类型 默认点播  0 直播 1 点播
  * ====================以上参数直播/点播必填===================
  *
  *
  *  time_callback       获取视频当前时间回调
  *  play_callback       继续播放回调
  *  pause_callback      暂停播放回调
  *=====================以上3个参数点播必填=====================
  *
  *
  *  mediaName   样式版本,有特殊定制样式需求的平台使用
  *  anchor      是否开启打点模式(0:不开启 1:开启 直播模式下,这里由平台判断用户是否有权限打点)
  *  userID      video++用户名
  *  userPwd		video++密码
  *  isAllowAD	是否开启广告通投 默认false
  */
 var obj:Object = new Object();
  	obj.width = 800;
    obj.height = 600;
  	obj.appkey = "VkB59DoBg";
  	obj.referer = "http://www.zhanqi.tv/11523586";
  	obj.source = "zhanqi";
  	obj.type = 0;
   //obj.time_callback = function():Number{ return player.time };
>		(videoPlsDS as Object).initializeByObject(obj);
> 	 }
> ```
  1. 3.Video++互动层加载完毕后,默认会监听stage.resize事件,之后Flash容器大小改变,互动层也会自动改变。同时,考虑到部分播放器会有自己的特殊宽度改变策略, 我们也提供了resize方法来供播放器自己调用处理。这里特别提醒下,播放器调用resize方法后,互动层将移除对stage的监听事件,也就不再自动根据画面来适配尺寸或者坐标。因此原则上我们不推荐使用resize方法,由于之后必须在每个改变尺寸的地方都需要调用一次我们的resize方法,这样对于播放器来说增加了部分无意义的代码。

    		/**
    		 * 调整容器大小
    		 * 所有元件会根据容器的大小改变,而动态改变位置
    		 * @param width   新宽度
    		 * @param height  新高度
    		 */
    		public function resize(width:Number, height:Number):void
    

点播模式有几个接口需要特殊操作

    1. 用户每次主动暂停/播放视频操作需要通知下互动层,调用以下接口
    		playAction(act:String,data: Object):void
    		act 方法名play|pause   视频播放|暂停状态
    		data 附带数据 (目前暂时不需要 固定传入null即可)
    
    1. 热点信息回调展示方法(有些播放器会在进度条上显示热点)
    		/**
    		 * 回传所有热点信息
    		 * @param array 热点信息数组
    		 * 内部每个element都是一个object
    		 * object.time      出现时间 Number单位毫秒
    		 * object.title     热点标题 String
    		 * object.x         热点位置X   播放器宽度的百分比例:0.5代表播放器宽度的50%处
    		 * object.y         热点位置Y Number 	播放器高度百分比
    		 * object.needWidth     热点width Number	播放器宽度百分比
    		 * object.needHeight	热点height Number	播放器高度百分比
    		 *
    		 */
    		function probar_data_call(array:Array){}
    
    1. 单个热点的打点回调(热点出现前回调)
    		/**
    			* 热点展示前主动回调,询问播放器是否可以展示
    			* @param object 同上方法array内每个element
    			* @return true 显示热点 false 不显示热点
    		*/
    			function oneTag_callback(object:Object):Boolean{
    			object的属性同上
    			return true 显示打点 return false 隐藏打点
    		}
    

插件模式

我们开发了常用CMS的插件,直接下载安装后即可使用。
没有你所使用的CMS?申请开发新插件 or 使用 CMS编辑器

iOS接入/iOS ACCESS

  1. 获取Appkey和Bundle ID (注:如何在我们的官网注册应用得到appkey和BundleID请点击链接查看我们的十分钟玩转控制台教程。)

  2. 下载SDK - 下载页面地址

  3. 获取video++SDK-iOS 之后解压压缩包,结构如图所示:

<img src="https://vplscdn.videojj.com/docs/img/iOS_1.png" style="max-width: 600px;width: 100%;"/>

  1. 快速集成
  1. 将下载的SDK解压后导入您的工程中 (注:请务必在此步骤中选择“Create groups”单选按钮组, 因该SDK体积过大,不要勾选“Copy items if needed”。用这种方式仅引用该SDK,避免引起项目体积过大的问题)
<img src="https://vplscdn.videojj.com/docs/img/iOS_2.png" style="max-width: 600px;width: 100%;"/>
  1. 设置项目的Framework Search Paths (注:由于我们采用了Reference的方式,所以此处必须在Framework Search Paths里面添加SDK在本机所在的路径,路径从Users开始)
<img src="https://vplscdn.videojj.com/docs/img/iOS_3.png" style="max-width: 600px;width: 100%;"/>
  1. 添加依赖库,如图所示:
<img src="https://vplscdn.videojj.com/docs/img/iOS_4.png" style="max-width: 600px;width: 100%;"/>

全部导入后应包含以下依赖库:

  ```
    必须添加的依赖库有(Xcode 7 下 *.dylib库后缀名更改为*.tbd):
      MobileCoreServices.framework
      Security.framework
      SystemConfiguration.framework
      AudioToolbox.framework,
      AVFoundation.framework,
      MediaPlayer.framework,
      CoreMedia.framework,
      WebKit.framework,
      libz.dylib,
      libbz2.dylib,
      libsqlite3.dylib.
  ```

  如图所示:

  <img src="https://vplscdn.videojj.com/docs/img/iOS_5.png" style="max-width: 600px;width: 100%;"/>
  1. 设置项目的AppKey和bundleID,配置bundle ID,如图所示:

    <img src="https://vplscdn.videojj.com/docs/img/iOS_6.png" style="max-width: 600px;width: 100%;"/>

设置支持设备旋转:

  <img src="https://vplscdn.videojj.com/docs/img/iOS_7.png" style="max-width: 600px;width: 100%;"/>

由于苹果https安全验证,此处须添加或配置App Transport Security Settings允许http协议地址(如无需配置可略过此步骤),打开Info.plist文件,如图:

  <img src="https://vplscdn.videojj.com/docs/img/iOS_8.png" style="max-width: 600px;width: 100%;"/>

接着,我们还需要设置Bitcode,目前SDK暂不支持Bitcode,所以需要设置为No,如图所示:

  <img src="https://vplscdn.videojj.com/docs/img/iOS_9.png" style="max-width: 600px;width: 100%;"/>

下面,在Build Settings里面找到Other linker flags,加入-ObjC标识。操作步骤如图所示:

  <img src="https://vplscdn.videojj.com/docs/img/iOS_10.png" style="max-width: 600px;width: 100%;"/>

  打开*AppDelegate.m("*"代表你的工程名字)导入头文件`#import <VenvyVideoSDK/VenvyVideoSDK.h>`
  在- `(BOOL)application: didFinishLaunchingWithOptions`:方法中调用`VenvyVideoSDK`的`setAppKey`方法来设置相应appkey:

  ```
  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // "Nktcz4C5-" 此处替换为自己的APPKEY
    [VenvyVideoSDK setAppKey:@"Nktcz4C5-"];

    return YES;
  }
  ```
  1. 添加实现代码
  在需要用到的地方添加头文件:
  #import <VenvyVideoSDK/VVSDKPlayerView.h>
  #import <VenvyVideoSDK/VVSDKPlayerViewController.h>

  在需要使用的地方接入如下代码:

  //视频地址(URL):测试点播地址,请根据情况自行替换
  //视频标题(LocalVideoTitle):请根据实际情况自行替换
  //视频类型(videoType):
  0:三大视频网站链接(支持优酷,土豆,腾讯)
  1:直播,点播,可直接访问的视频原地址
  2:需要解析json得到视频地址的链接
  //IsLive:是否是直播,根据地址类型选择YES或NO
  //以控制器的方式调用,代码如下:
  VVSDKPlayerViewController*player = [[VVSDKPlayerViewController alloc]
  initWithUrl:@"http://7xr5j6.com1.z0.glb.clouddn.com/hunantv0129.mp4" VideoType:1 LocalVideoTitle:@"点播测试"];
  [player setIsLive:NO];
  [self presentViewController:player animated:YES completion:nil];

  //注意:以上控制器的调用请勿放在viewDidLoad中直接执行,应放在事件里面调用。跳转时当前控制器的shouldAutorotate必须为YES。(为NO目前已知8.1和8.2会出错)
  - (BOOL) shouldAutorotate {
    return YES;
  }

<!--

旧的ios接入文档

  1. 下载SDK文件,SDK文件包括 VenvyVideoSDK.framework ,VideoPlsIVASDKResources.bundle 和 VenvyVideoSDKResources.bundle三个(其中VenvyVideoSDK.framework和VideoPlsIVASDKResources.bundle是必须导入,而如果使用无界面用户可以不导入VenvyVideoSDKResources.bundle)。可使用的播放器有两个: VVSDKPlayerView(view级播放器)和VVSDKPlayerViewController(Controller级播放器)。view级播放器详细请看头文件和高手进阶。含有Cocoapod和没有的接入方法一样。 (注:请使用Xcode5及以上版本,SDK目前支持系统为iOS7以上(不能使用bitcode)。已知在有含ffmepg的第三方库情况下无法正常运行,加载库使用force_load可解决但不推荐,详见5注)。

  2. 将这三个文件添加到你的工程中,如果是协同开发、使用git或svn等版本控制系统,最好不要将framework复制到项目目录下,请采用Reference的方法(不要勾选Copy items if needed)。播放器支持模拟器和真机测试。(framework中包含编译ijkPlayer(ffmpeg)的库(https://github.com/Bilibili/ijkplayer),所以库很大。打包后会增加ipa包3.5M左右的大小(v1.1及以前为7M左右)。模拟器播放使用软解的视频会音画不同步且退出播放器时有几率闪退,CPU跟不上,真机没有此问题。另模拟器在打开全局断点会在播放前进入断点,点继续运行3~5次即可)。

  如果使用demo请重新绑定framework和bundle,并删除红色占位的SDK。
  1. 在Info.plist中需要添加View controller-based status bar appearance,值为NO。

  2. 在工程设置项的TARGETS中,General标签中的Deployment Info 需要加上Landscape Left和Landscape Right。(也可在Info.plist中修改Supported interface orientations项) 注:如果只使用VVSDKPlayerView则可以不设置横屏,但Demo中针对view级的演示controller也无法使用,请自行斟酌或者重写控制器。

  3. 在Build Settings标签下的Linking中的Other Linker Flags中添加 –ObjC。(注意大小写!!有使用Cocoapod的项目自带,无需设置) 注:如果项目中加载多个静态库(有冲突的),并使用了-force_load的,不能添加-ObjC,且相应此库也需要加入force_load,路径需要指定到VenvyVideoSDK.framework/VenvyVideoSDK

  4. 由于有使用系统的多媒体播放功能和网页访问(iOS 8会使用WebKit,本地存储使用了sqlite。Xcode 7引用后缀dylib需改为tbd),所以需要在Build Phases中的Link Binary With Libraries要添加

   AudioToolbox.framework,
   AVFoundation.framework,
   MediaPlayer.framework,
   CoreMedia.framework,
   WebKit.framework,
   libz.dylib,
   libbz2.dylib,
   libsqlite3.dylib.
   如果没有使用Cocoapod可能需要多添加
   MobileCoreServices.framework
   Security.framework
   SystemConfiguration.framework
  1. 在AppDelegate.m中引入头文件
#import <VenvyVideoSDK/VenvyVideoSDK.h>
并在didFinishLaunchingWithOptions函数中向Video++注册你的AppKey:
[VenvyVideoSDK setAppKey:@"xxxx"];
  1. 使用时在需要接入播放器的View Controller中引入头
#import <VenvyVideoSDK/VVSDKPlayerViewController.h>

在需要使用的地方接入 //自行填入视频路径,视频类型和播放器上显示的标题(可选)

//视频类型为 0:八大视频网站链接,1:视频原始播放地址,2:直播
VVSDKPlayerViewController *player = [[VVSDKPlayerViewController alloc] initWithUrl:url VideoType:0 LocalVideoTitle:nil];
[self presentViewController:player animated:YES completion:nil];

注意:present去SDKPlayerViewController的VC的shouldAutorotate必须为YES。(为NO目前已知8.1和8.2会出错) SDKPlayerView使用方法详见高手进阶和头文件。

  1. 修改图标方面,在VenvyVIdeoSDKResources.bundle下, loading_logo和loading_view是加载时显示的,3倍大小分别为 150和267。 播放器界面logo是player_logo,3倍大小是150。 -->

iOS高手进阶

<p>如果视频有前贴片广告,请在贴片结束以后再加载互动层</p>

  1. view级播放器需要一个承载的UIViewController,Demo中的VVViewPlayerViewController是一个测试控制器(present,如果要使用push请自行根据生命周期作出调整),只提供显示view级播放器的测试,您可以自行根据需要编写自己的控制器。

  2. 具体view级播放器的属性和方法详见framework中的头文件,其中canSwitchFullScreen为设置是否能全屏,设置后会修改isFullScreen(是否全屏)的值,请于设置canSwitchFullScreen之后再设置isFullScreen。canSwitchFullScreen默认为NO,此时isFullScreen默认为YES;canSwitchFullScreen设置为YES时isFullScreen默认为NO。建议在canSwitchFullScreen为NO时保持isFullScreen为YES。

  3. 请在startLoadingVideo之前完成所有设置,注意有切换全屏方法最好在方法block中加入updateFrame。startLoadingVideo之后将无法设置参数,在stop之后可重新设置url,videoType和localVideoTitle。如需重新设置block的方法或是否能切换全屏请释放本播放器并重新生成播放器。

  4. 如果是在初始化controller时创建VVSDKPlayerView并且在viewDidLoad中调用startLoadingVideo的,一定要注意对controller的view修改一定要放在VVSDKPlayerView初始化之后(比如修改view的背景颜色),不然会提前调用viewDidLoad导致VVSDKPlayerView还未生成就调用方法导致出错。

  5. 在结束播放器并要释放时一定要调用stopAndDestoryView,不然内存无法释放。

  6. 在切换全屏的方法中可加入Core Animation使切换更平滑。

  7. 旋转相关

  1. 利用present一个ViewController然后dismiss来触发ViewController的检查旋转机制,达到设置为横屏,这样做的坏处是无法或者很难设置旋转动画。

  2. 目前较为寻常的做法是:

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];    
// iOS8 还要把shouldAutorotate设为NO,转完才设为YES,不然设备会转回竖屏
[self.view setTransform:CGAffineTransformMakeRotation(M_PI_2)];
self.view.bounds = CGRectMake(0, 0, screenRect.width, screenRect.height); // iOS8  不要执行

但是这个方法由于旋转机制改变在iOS8中失效,强行旋转view后再旋转设备有可能屏幕错位或者有部分屏幕触摸失效(一般为右屏幕)。注:iOS8不要设置view.bounds。

  1. 使用UIDevice的私有接口setOrientation强制旋转设备,这样keyboard出现的方向也不会出错(包括用户锁定设备旋转),但有拒审的可能,谨慎使用。(该方法效果最好)

  2. 全屏不旋转,只有当用户旋转设备时才进行旋转。

  3. Demo提供一个较为完整旋转方案,基于第二种方案。

Android接入/android ACCESS

Android自无播放器对接(自己没有播放器)

  1. 获取AppKey

    登录vidoejj开发者帐号并添加APP,即可获得AppKey

  2. 下载SDK - 下载页面地址

    下载SDK文件,SDK文件包括VideoJJSdkDemo官方Demo项目和VideoJj SDK项目两个文件件。你可以使用项目依赖的方式使用SDK ,也可拷贝资源文件和libs到你的项目中。 VideoJj SDK提供JjVideoView类其中JjVideoView 可自定义UI(可参考Demo工程)

  3. 快速集成

    第一步:配置AndroidManifest.xml(VideoJJSdkDemo项目配置)

    1. 添加权限
       <uses-permission android:name="android.permission.INTERNET" />
       <uses-permission android:name="android.permission.READ_PHONE_STATE" />
       <uses-permission android:name="android.permission.WRITE_SETTINGS" />
       <uses-permission android:name="android.permission.WAKE_LOCK" />
       <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
       <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
       <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
       <uses-permission android:name="android.permission.BROADCAST_STICKY" />
       <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
       <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
       <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
       <uses-permission android:name="android.permission.GET_TASKS" />
       <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
    
    1. 在用到JjVideoFragment的activity添加信息

    <activity android:name="cn.com.video.venvy.activity.VenvyVideoActivity" android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation" android:label="@string/app_name" android:launchMode="singleTop" android:process=":videojj" android:windowSoftInputMode="stateAlwaysHidden" > </activity>

    1. 在用到JjVideoView 配置信息(注:JjVideoVie需要调用setVideoJjAppKey(String appkey), setVideoJjPageName(String pageName))
       <cn.com.video.venvy.param.JjVideoView
               android:id="@+id/video"
               android:layout_width="match_parent"
    
          android:layout_height="200dp "/>              
    

    第二步:SDK用法

    1. 获取video++sdk-Android v2.x之后解压压缩包,结构图如下:

    <img src="https://vplscdn.videojj.com/docs/img/android_1.png" style="max-width: 600px;width: 100%"/>

    1. 将下载的SDK解压后导入您的工程中,如下图所示: (注:一定要选中videoJjislibrary的is Library选项。)

    <img src="https://vplscdn.videojj.com/docs/img/android_2.png" style="max-width: 600px;width: 100%"/>

    1. 依赖videoJjlibrary项目

    <img src="https://vplscdn.videojj.com/docs/img/android_3.png" style="max-width: 600px;width: 100%"/>

    1. 设置Video++的AppKey和实现代码在Activity中添加如下代码:

    <img src="https://vplscdn.videojj.com/docs/img/android_4.png" style="max-width: 600px;width: 100%"/>

    第三步:开启到播放器

      JjVideoView mVideoView;
      mVideoView. setVideoJjAppKey(String key);//配置key
      mVideoView.setVideoJjPageName(String pageName);//配置项目包名
      mVideoView.setResourceVideo(String mPath);//开启播放
      mVideoView.setResourceVideo(Uri mUri);//开启播放
    
  4. JjVideoView公共方法

    
      public void setResourceVideo(Intent i);
      public void setResourceVideo(Uri  mUri);
    
     播放器入口
    

    public void setVideoJjType(int mType); 设置视频类型设置视频源类型 0代表 6大网站 1代表本地 2代表直播 3.网源4 特殊 public void setMediaController(MediaControllerBase controller); 设置媒体控制器。(Demo工程有例子) public void setMediaControllerSize(int w,int h); 设置控制器大小 public void setMediaBufferingView(View mediaBufferingIndicator); 设置缓冲控件 public void stopPlayback(); 停止视频播放,并释放资源 public void setVideoJjResetState(); 重置播放器,外部二次加载调用 public void setVideoJjTitle (String mTitle); 设置视频标题 public void setVideoJjSaveExitTime(Boolean mSave); true 二次进入播放重上次退出位置开始播放 false 不记录退出位置 public void setVideoJjSeekToTime(long mSeekTime); 播放器重指定位置开始播放(参数毫秒) public boolean isValid(); Surface是否有效。 public void onOpenWindmill() {}; 打开风车 public void onCloseWindmill() {}; 关闭风车 public void onCloseCloudbubble(){super.onCloseCloudbubble();} 关闭云泡 public void onOpenCloudbubble(){}; 开启云泡 public void setJjToFront(ViewGroup mView) {super.setJjToFront(mView);} 设置播放器类位于视图最顶层 public void setOnJjOpenStart(OnJjOpenStartListener onJjOpenStartListener); 注册一个回调函数,在视频开始预处理完成时调用 public void setOnJjOpenSuccess(OnJjOpenSuccessListener onJjOpenSuccessListener); 注册一个回调函数,在视频预处理完成后调用 public void setOnJjCompletionListener(OnJjCompletionListener onJjCompletionListener); 注册一个回调函数,视频播放完成后调用。 public void setOnJjOpenFailedListener(OnJjOnOpenFailedListener onJjOnOpenFailedListener); 注册一个回调函数,在异步操作调用过程中发生错误时调用. public void setOnJjBufferingUpdateListener(OnJjBufferingUpdateListener onJjBufferingUpdateListener); 注册一个回调函数,在网络视频流缓冲变化时调用。 public void setOnJjSeekCompleteListener(OnJjSeekCompleteListener onJjSeekCompleteListener); 注册一个回调函数,在seek操作完成后调用。 public void setOnJjBufferStart(OnJjBufferStartListener onJjBufferStartListener); 注册一个回调函数,网络视频流缓冲开始时调用。 public void setOnJjBufferComplete(OnJjBufferCompleteListener onJjBufferCompleteListener); 注册一个回调函数,网络视频流缓冲结束时调用。 public void setOnJjOutsideLinkClick(OnJjOutsideLinkClickListener onJjOutsideLinkClickListener); 注册一个回调函数,用户自定义的外链点击事件。 public void setMediaCodecEnabled(boolean codecEnable); 设置是否开启硬解 public void start(); 开始播放。 public void pause(); 暂停播放。 public long getDuration(); 获取视频总时间 public long getCurrentPosition(); 获取视频当前播放时间 public void seekTo(long msec); 设置播放位置。 public boolean isPlaying(); 是否正在播放。 public int getVideoWidth(); 获取视频宽度。 public int getVideoHeight(); 获取视频高度。 public void setVideoJjAppKey(String s); 设置申请应用填写的key public void setVideoJjPageName(String s); 设置申请应用填写的包名 public void setVideoQualityHighToLow(boolean b); 设置播放器加载视频源清晰度顺序

Android自有播放器对接(自己有播放器,只需要控件)

iva 互动层提供VenvyIvaLayout一个控件 ,互动层内容只会横屏全屏显示。 <p>如果视频有前贴片广告,请在贴片结束以后再加载互动层</p>

  /***
 		调用此方法将播放器当前时间传递给VenvyIvaLayout
 		注意(此时给我返回的是毫秒,mVideoView 为播放器类,必设参数)
 		此方法不设会导致互动层不显示
  /
 	mIva.setCurrentListener(new onCurrentListener() {
               @Override
               public long getCurrentPosition() {
                   try {
                       //此处最好判断下视频SeekBar是否拖动状态,拖动时不要传递时间
                       return mVideoView.getCurrentPosition();
                   } catch (Exception e) {
                       e.printStackTrace();
                   }
                   return 0;
               }
           }
    );
    /*
    * 设置视频的比例宽高(此方法可多次调用,必设参数),此方法不设或设置视频比例宽高不对,会导致互动层位置不对
    */
    mIva.setVideoRenderView(int mVideoWith,int mVideoHight);
/**
	设置视频的渲染控件,获取视频的比例宽高,此方法同setVideoRenderView(int w,int h);
	设置此方法要保证VenvyIvaLayout可正确获取视频的比例宽高
*/
mIva.setVideoRenderView(View mRenView);
/***
* 设置视频的播放类型(分为直播,点播),其中直播类型是2,点播分为6大网站的.html类型0,网源类型,3,本地视频类型1
	注:点播不需要传递播放器时间
/
mIva.setVideoType(int mVideoType);
/***
* http://videojj.com/
	官网申请Android应用申请的key(必设参数);
*/
mIva.setVenvyKey(String key);
/***
* 申请Android应用填写的包名(你项目的包名,确保你key的唯一性)
*/
mIva.setVenvyPageName(String page);
/***
*  VenvyIvaLayout 请求所需数据
	此方法开启点播 直播互动层功能(参数:视频源地址,必设参数)
*/
mIva.setVideoPath(String mPath);
/***
*  VenvyIvaLayout 请求所需数据
	此方法开启点播 直播互动层功能(参数:视频源地址,必设参数)
*/
mIva.setVideoPath(Uri mUri);
/***
*  设置云链UI刷新频率(参数毫秒)
	默认800
*/
mIva.refreshRate(int time);
/***
*初始化风车  在播放器开始播放时调用此方法
*/
mIva.onInitWindmill();
/***
*设置视频标题(非必填)
*/
mIva.setVideoTitle(String mTitle);
/***
 * 开启云链功能
 */
mIva.start() {
/***
 * 关闭云链功能
 */
mIva.stop()
/***
 * 开启云泡功能
 */
mIva.startChat()
/***
 * 关闭云泡功能
 */
public void stopChat()
/***
*开启风车功能,默认不显示
*/
mIva.onOpenWindmill();
/***
*关闭风车功能,默认不显示
*/
mIva.onCloseWindmill();
/***
*关闭隐链 隐链默认不显示
*/
mIva.onCloseHideChain();
/***
	显示隐链 ,默认不显示
*/
mIva.onOpenHideChain():
/***
*关闭显链 隐藏默认显示
*/
mIva.onCloseShowChain();
/***
	显示显链 ,默认显示
*/
mIva.onOpenShowChain():
/***
	结束必须调用 否则直播可能有问题
*/
mIva.onDestroy();
/***
  *关闭当前云窗(侧滑控件)
*/
mIva.onCloseCloudWindow();
/***
*判断云窗是否打开(侧滑控件)
*/
mIva.isOpenCloudWindow();
/**
*相关统计.....
*/
/*
*播放器播放量统计(参数:播放器开始播放时间)
*/
mIva.onStartPlayerTrack(long mVideoStartTime);
/*
*滚动条拖动事件统计
*/
mIva.onSeekBarChangePlayerTrack(long mStartTrackTime,
		long mStopTrackTime);
/**
	播放器暂停事件统计
*/
mIva.onPausePlayerTrack(long mPauseTime);
/**
	播放器关闭事件统计
*/
mIva.onReleasePlayerTrack(long mCloseTime);
 /**
  强制更新视频的宽高值(比如视频切换4:3 16:9比例等等)
  在你操作播放器导致视频大小显示发生变化调用此方法
  注意:此方法不可多次调用,调用一次,内部会强制更新一次互动层位置
*/
mIva.updateVideoRenderView(int mVideoWith,int mVideoHight);
/**
*发送云泡监听器通知
*/
mIva.setOnSendChatListener(new onSendChatListener());
/***
	点击云泡功能 弹出键盘事件监听
*/
mIva.setonShowKeyboardListener(new onShowKeyboardListener());
/***
*云链点击事件监听
*/
mIvaView.setTagClickListener(new onTagClickListener() {
           @Override
           public void onTagClick() {
           }
       });
/***
*外链WebView点击打开关闭事件监听
*/
msg.setOutsideLinkClickClickListener(new onOutsideLinkClickClickListener() {
		@Override
		public void onLinkClose() {
			// TODO Auto-generated method stub
		}
		@Override
		public void onLinkClick(String mLinkUrl) {
			// TODO Auto-generated method stub
		}
	});

视频解析封装格式/VIDEO ADDRESS RESOLUTION PROTOCOL

如果您的网站使用自有的视频解析服务时(比如与CDN或其他第三方视频托管平台合作),此时传给Video++的视频地址为在query部分加了指定标识(site=bve)的api,api返回解析封装格式(服务器端请做允许跨域的配置;如果视频为m3u8格式,需要在视频存储根目录放入crossdomain.xml),内容如下:

{ status:0, msg:{ site: 'site名字',  //必填   time_length: '视频长度(秒)', //非必填   total_size: '视频段数',  //非必填   title: 'title', //非必填   logo: 'logo', //非必填   segs: {     1080p: [{url: 'sssssss.mp4 ', seconds: '秒数', number:'第几段'}],     720p: [{url: 'sssssss.mp4', seconds: '秒数', number:'第几段'}],     SuperHD: [{url: 'sssssss.m3u8', seconds: '秒数', number:'第几段'}],     HD: [{url: 'sssssss.m3u8', seconds: '秒数', number:'第几段'}], //必填     SD: [{url: 'sssssss.mp4', seconds: '秒数', number:'第几段'}]   } }//url必填, seconds非必填, number非必填 }

错误时
{

status: 500,   msg: 'err message'

}

参考示例:

<span style="font-size:14px;">http://7xr51b.com1.z0.glb.clouddn.com/parse.json?site=bve</span>

{
 "status": 0,
 "msg": {
   "site": "youku",
   "time_length": 0,
   "total_size": 0,
   "title": "",
   "logo": "http://r4.ykimg.com/05420101564D39076A0A4304E07D5CA9",
   "segs": {
     "HD": [
       {
         "size": 9033984,
         "seconds": 251,
         "number": 0,
         "url": "http://k.youku.com/player/getFlvPath/sid/745328260863420182d9c_00/st/flv/fileid/0300020100564D30BCC10230059CF7F592496A-EF4F-AA8C-7BC1-3377C0E329AF?K=c209c833fb08c19f261ecc90&hd=0&ts=251&ymovie=1&r=/3sLngL0Q6CXymAIiF9JUQQtnOFNJPUClO8A56KJJcT8UB+NRAMQ09zE6rNj4EKMxAvRByWf6hitgv75Fv0ffXP0vqmhlqedu1OdBtzrXH1YEO1PztxadD8A+IdBkdsioIcpwqrK3jS7XzH4g9NLdRf3bK0AXnVeffOa8KuciZY=&ypremium=1&oip=2067476020&token=1439&sid=745328260863420182d9c&did=1453282608&ev=1&ctype=20&ep=AH1TnSAzqZiJjVttkMsR1VZ0MbBIvO2hsSYYyq5fRnkonN2KUqVneo4Y288hRO6RHcqEQYx0O5C3LmZ6f%2BzDjdFeXotboUYaeH40ig3e30iT02Txj3qgvFs2a5pFxv3C"
       }
     ],
     "SD": [
       {
         "size": 17299553,
         "seconds": 251,
         "number": 0,
         "url": "http://k.youku.com/player/getFlvPath/sid/745328260863420182d9c_00/st/mp4/fileid/0300080100564D32CAC10230059CF7F592496A-EF4F-AA8C-7BC1-3377C0E329AF?K=9ee0b559c849434a261ecc90&hd=1&ts=251&ymovie=1&r=/3sLngL0Q6CXymAIiF9JUQQtnOFNJPUClO8A56KJJcT8UB+NRAMQ09zE6rNj4EKMxAvRByWf6hitgv75Fv0ffSGy9wN3EdBIHYaR9+VkrteK9PCump2J3CoMoQp7HSEBaCylpmiXPvrICeMF0vcwpRf3bK0AXnVeffOa8KuciZY=&ypremium=1&oip=2067476020&token=1439&sid=745328260863420182d9c&did=1453282608&ev=1&ctype=20&ep=AH1TnSAzqZiJjVttkMsR1RXF09ZY7I9lbJfjh9IhA6G%2B6nBPegyeUz5DJ3UOYgXcHcqEQYx0O5C3LmZ6f%2BzDjdFeXotboUYaeH40ig3e30iT02Txj3qgvFs2a5pFxv3C"
       }
     ]
   }
 }
}
venvy-hot