untitledOURTEAMlinkedinuntitled2untitled3iconuntitled4icon2untitled01020304ourteam-01-2youjian-01
lingdonglingfenglingkonglingmoulingwulingyuelingzhizhanshiiconfont-jindanluntaniconfont-boke4iconfont-wendang0iconfont-pciconfont-AppleAcciconfont-iconset0290iconfont-iconfontfaqviconfont-touxiangclosenavbar-liveOSnavbar-videoAinavbar-videodatanavbar-videoOSnavbar-vmrtnavbar-one1navbar-documentnavbar-faqnavbar-tutorialnavbar-blognavbar-forumvideojj-magicinvideojj-revenueSVD-01vdap-ctrlnavbar-videoOS-titlenavbar-LiveOS-titleicon-hotnavbar-newtop-arrowvpls-product-arrowvpls-product-plus

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();

插件模式

我们开发了常用CMS的插件,直接下载安装后即可使用。

应用标示获取方式:1、注册video++账号; 2、在控制台创建自己的项目; 3、获得应用标示。具体请参考这里

没有你所使用的CMS?请联系我们客服(右下角)

iOS点播接入/iOS ACCESS

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

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

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

  4. 快速集成

    1) 将下载的SDK解压后导入您的工程中 (注:请务必在此步骤中选择“Create groups”单选按钮组, 因该SDK体积过大,不要勾选“Copy items if needed”。用这种方式仅引用该SDK,避免引起项目体积过大的问题)

    2) 设置项目的Framework Search Paths (注:由于我们采用了Reference的方式,所以此处必须在Framework Search Paths里面添加SDK在本机所在的路径,路径从Users开始)

    3) 添加依赖库,如图所示:

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

         必须添加的依赖库有(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.
    

    如图所示:

    4) 设置项目的AppKey和bundleID,配置bundle ID,如图所示:

    设置支持设备旋转:

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

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

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

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

       - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
         // "Nktcz4C5-" 此处替换为自己的APPKEY
         [VenvyVideoSDK setAppKey:@"Nktcz4C5-"];
    
         return YES;
       }
    
  5. 添加实现代码

     在需要用到的地方添加头文件:
     #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;
     }
    

Android点播接入/Android ACCESS

  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" />
    

    2) 在用到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>
    

    3) 在用到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之后解压压缩包,结构图如下:

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

    3) 依赖videoJjlibrary项目

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

    第三步:开启到播放器

      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);
         设置播放器加载视频源清晰度顺序
    

视频解析封装格式/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'
}

参考示例:

http://7xr51b.com1.z0.glb.clouddn.com/parse.json?site=bve

{
 "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"
       }
     ]
   }
 }
}

网站接入/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>
    
  2. 新建一个div作为视频播放的窗口,建议div的宽高在640px*480px以上,如果小于此宽高的话,视频会以弹窗形式播放。

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

    /**
    
    *创建Iva实例,以下参数值是时间的均以秒为单位
    
    */
    
    var ivaInstance = new Iva(
     '父容器',//父容器id或者父容器DOM对象,给父容器设置宽高640px*480px以上可以获得最佳的浏览体验;
     {
       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像素
     }
    );
    
  4. 如果要销毁实例,可以调用实例的destroy方法 ivaInstance.destroy();

直播模式

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

    <script type="text/javascript" src="http://7xjfim.com2.z0.glb.qiniucdn.com/Iva.js"></script>
    
  2. 新建一个div作为直播视频播放的窗口,建议div的宽高在640px*480px以上,如果小于此宽高的话,视频会以弹窗形式播放。

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

    直播模式参数live必须为true
    /**
    
    *创建Iva实例,以下参数值是时间的均以秒为单位
    
    */
    
    var ivaInstance = new Iva(
     '父容器',//父容器id或者父容器DOM对象,给父容器设置宽高640px*480px以上可以获得最佳的浏览体验;如果宽高在640px*480px以下,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像素
     }
    );
    
  4. 如果要销毁实例,可以调用实例的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);
         }
    
  3. 3.Video++互动层加载完毕后,默认会监听stage.resize事件,之后Flash容器大小改变,互动层也会自动改变。同时,考虑到部分播放器会有自己的特殊宽度改变策略, 我们也提供了resize方法来供播放器自己调用处理。这里特别提醒下,播放器调用resize方法后,互动层将移除对stage的监听事件,也就不再自动根据画面来适配尺寸或者坐标。因此原则上我们不推荐使用resize方法,由于之后必须在每个改变尺寸的地方都需要调用一次我们的resize方法,这样对于播放器来说增加了部分无意义的代码。

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

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

  1. 1) 用户每次主动暂停/播放视频操作需要通知下互动层,调用以下接口

           playAction(act:String,data: Object):void
           act 方法名play|pause   视频播放|暂停状态
           data 附带数据 (目前暂时不需要 固定传入null即可)
    
  2. 2) 热点信息回调展示方法(有些播放器会在进度条上显示热点)

           /**
            * 回传所有热点信息
            * @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){}
    
  3. 3) 单个热点的打点回调(热点出现前回调)

           /**
               * 热点展示前主动回调,询问播放器是否可以展示
               * @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 之后解压压缩包,结构如图所示:

  4. 快速集成

    1) 将下载的SDK解压后导入您的工程中 (注:请务必在此步骤中选择“Create groups”单选按钮组, 因该SDK体积过大,不要勾选“Copy items if needed”。用这种方式仅引用该SDK,避免引起项目体积过大的问题)

    2) 设置项目的Framework Search Paths (注:由于我们采用了Reference的方式,所以此处必须在Framework Search Paths里面添加SDK在本机所在的路径,路径从Users开始)

    3) 添加依赖库,如图所示:

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

         必须添加的依赖库有(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.
    

    如图所示:

    4) 设置项目的AppKey和bundleID,配置bundle ID,如图所示:

    设置支持设备旋转:

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

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

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

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

       - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
         // "Nktcz4C5-" 此处替换为自己的APPKEY
         [VenvyVideoSDK setAppKey:@"Nktcz4C5-"];
    
         return YES;
       }
    
  5. 添加实现代码

     在需要用到的地方添加头文件:
     #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. 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。

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

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

    5) 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" />
    

    2) 在用到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>
    

    3) 在用到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之后解压压缩包,结构图如下:

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

    3) 依赖videoJjlibrary项目

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

    第三步:开启到播放器

      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一个控件 ,互动层内容只会横屏全屏显示。

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

  /***
         调用此方法将播放器当前时间传递给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'
}

参考示例:

http://7xr51b.com1.z0.glb.clouddn.com/parse.json?site=bve

{
 "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