# 跑马灯

## 功能介绍

视频如今已应用在各行各业中。可是，视频版权问题依然是困扰大多数人的难题。而录屏，是视频防盗中最难防范的一个环节。如何去防录屏，这成为了人们普遍关心的问题。

因此，POLYV针对性定制了一款增强防录屏效果的视频功能—视频跑马灯功能。

跑马灯功能，可以根据个人喜好进行设置跑马灯的具体效果，使该功能在保证防录屏的前提下还不影响，访客的观看体验与视频的整体美观。

还可以通过使用POLYV提供的接口，通过设定，可以实现设定文字在视频上不规则的跑动，如客户可以通过代码获取到访客的ID后，将ID以跑马灯的方式展现在视频的上方，这样可以大大的增加盗版者的录屏成本，同时还能够强力的震慑盗版者。

### 后台设置

直播后台 --> 选择频道 --> 播放器管理 --> 防录屏跑马灯

#### 固定值和登录用户名

`可设置参数`

|   参数  | 说明                                            |
| :---: | --------------------------------------------- |
| 跑马灯内容 | 显示的跑马灯内容，登录用户名需要设置param2参数                    |
|  字体大小 | 跑马灯内容字体大小，不建议设置小于12号字体                        |
|  字体颜色 | 跑马灯内容字体颜色，16进制数值                              |
|  透明度  | 跑马灯内容透明度，最大是99%                               |
|  显示方式 | 跑马灯显示方式，`滚动`是自屏幕右方至左方一直滚动 `闪烁`是屏幕内随机位置闪烁      |
|  双跑马灯 | 开启后，额外加载一个内容相同的跑马灯，该跑马灯肉眼不可见，可经过特殊处理后显示，用于溯源。 |
| 自定义缩放 | 开启后，跑马灯内容可以随播放器大小的缩放而缩放                       |

* 外嵌播放时用登录用户名需要设置param2参数，否则会报错
* 固定值和登录用户名可以快速设置显示跑马灯，但是安全性不及自定义跑马灯，对防录屏有较高要求请使用自定义跑马灯和开通防录屏功能

`效果`

![固定值](https://git.polyv.net/help-center/document-center/-/blob/master/img/front/跑马灯2.png)

![固定值](https://git.polyv.net/help-center/document-center/-/blob/master/img/front/跑马灯3.png)

#### 自定义跑马灯

如果需要用自定义跑马灯，则需要在直播后台设置跑马灯链接，如：<http://www.mywebsite.com/validate.php>

**- 后端返回json**

用户的http协议接口（如 <http://www.mywebsite.com/validate.php> ）代码示例：

```php
<?php
$username= "elvis";// 用户昵称, 若值为中文需要urlencode('张三')，从session获取
$vid = $_GET["vid"];    
$uid = $_GET["uid"];    
$t = $_GET["t"];    
$code = $_GET["code"];  // 可选
$callback = isset($_GET["callback"])?$_GET["callback"]:null; //未提交callback时则设为空
$msg='播放错误（测试）';          
$fontSize=50;     
$fontColor='0xFFFF00';  
$speed=50;
$filter='on';
$setting=3;
$alpha=0.9;
$filterAlpha=0.9;
$filterColor='0xFF0000';
$blurX=2;
$blurY=2;
$interval=2;
$lifeTime=5;
$tweenTime=5;
$strength=100;
$show='on';
$str="vid=".$vid."&uid=".$uid."&username=".$username."&code=".$code."&t=".$t."&msg=".$msg."&fontSize=".$fontSize."&fontColor=".$fontColor."&speed=".$speed."&filter=".$filter."&setting=".$setting."&alpha=".$alpha."&filterAlpha=".$filterAlpha."&filterColor=".$filterColor."&blurX=".$blurX."&blurY=".$blurY."&interval=".$interval."&lifeTime=".$lifeTime."&tweenTime=".$tweenTime."&strength=".$strength."&show=".$show;
$sign=md5($str);    //加密规则，md5加密，
$array = Array("show"=>$show,"sign"=>$sign,"username"=>$username,"msg"=>$msg,"fontSize"=>$fontSize,"fontColor"=>$fontColor,"speed"=>$speed,"filter"=>$filter,"setting"=>$setting,"alpha"=>$alpha,"filterAlpha"=>$filterAlpha,"filterColor"=>$filterColor,"blurX"=>$blurX,"blurY"=>$blurY,"interval"=>$interval,"lifeTime"=>$lifeTime,"tweenTime"=>$tweenTime,"strength"=>$strength);    
$validateJson = json_encode($array);
if($callback != ''){
    echo $callback."(".$validateJson.")";   
} else{
    echo $validateJson;
}
?>

```

注：接口如返回中文内容，请修改编码为UTF-8编码

以下为接口的返回示例：

```json
{
  "username":"elvis",
  "sign":"6ab63590797e513d1b6c46b407413478",
  "msg":"Errormessage!",
  "fontSize":"40",
  "fontColor":"0xFFE900",
  "speed":"200",
  "filter":"on",
  "setting":"3",
  "alpha":"1",
  "filterAlpha":"1",
  "filterColor":"0x3914AF",
  "blurX":"2",
  "blurY":"2",
  "tweenTime":"1",
  "interval":"5",
  "lifeTime":"3",
  "strength":"4",
  "show":"on"
}
```

参数解释：

| 参数名         | 代表意义                         | 参数可选                                                                                                                               | 参数类型              | 是否必需项 | 默认值         |
| ----------- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ----- | ----------- |
| username    | 用户名，可以是学员的id，也可以是任意定义的值，不可为空 |                                                                                                                                    | String            | 是     |             |
| sign        | 通过MD5加密算法计算得到32位小写的值         |                                                                                                                                    | String            | 是     |             |
| msg         | 跑马灯错误时提示信息                   |                                                                                                                                    | String            | 是     |             |
| fontSize    | 跑马灯文字字体大小                    |                                                                                                                                    | Integer           | 是     | 30          |
| fontColor   | 跑马灯文字字体颜色                    | 包含三个 8 位 RGB 颜色成分的数字；例如，0x000000 为黑色                                                                                               | String            | 是     | 0x000000 黑色 |
| speed       | 跑马灯文字移动指定像素所需时间              |                                                                                                                                    | Integer 单位:(秒/10) | 是     | 200         |
| filter      | 是否描边                         | “on” ：描边 “off”：不描边                                                                                                                 | String            | 是     | off         |
| setting     | 跑马灯样式                        | 1：自屏幕右方至左方一直滚动 2：屏幕内随机位置闪烁 3：自屏幕右方至左方一直滚动，渐隐渐现 4：上下15%的视频区域之间滚动 5：上下15%的视频区域随机闪现文字 6：样式 1 的增强型，加密效果更好，推荐使用 7：样式 2 的增强型，加密效果更好，推荐使用 | Integer           | 是     | 1           |
| alpha       | 跑马灯文本透明度                     | 范围：0.1\~1                                                                                                                          | Float             | 是     | 1           |
| filterAlpha | 跑马灯描边透明度                     | 范围：0\~1                                                                                                                            | Float             | 是     | 1           |
| filterColor | 跑马灯描边颜色                      | 包含三个 8 位 RGB 颜色成分的数字；例如，0x000000 为黑色                                                                                               | String            | 是     | 0x000000 黑色 |
| blurX       | 跑马灯描边水平模糊量                   | 范围：0\~255                                                                                                                          | Integer           | 是     | 2           |
| blurY       | 跑马灯描边垂直模糊量                   | 范围：0\~255                                                                                                                          | Integer           | 是     | 2           |
| interval    | 跑马灯文本隐藏间隔时间                  |                                                                                                                                    | Integer (单位：秒)    | 是     | 5           |
| lifeTime    | 跑马灯文本显示时间                    |                                                                                                                                    | Integer （单位：秒）    | 是     | 3           |
| tweenTime   | 跑马灯文本渐隐渐现时间                  |                                                                                                                                    | Integer （单位：秒）    | 是     | 1           |
| strength    | 跑马灯描边强度                      | 范围：0\~255                                                                                                                          | Integer           | 是     | 4           |
| show        | 是否显示跑马灯，默认显示                 |                                                                                                                                    | String            | 是     | off         |

参数详解

`sign`\
sign的计算规则为：将以下参数的值拼凑起来的字符串做MD5计算，签名需要以下全部参数拼接，未设置值的也要参与。

```php
  $str="vid=".$vid."&uid=".$uid."&username=".$username."&code=".$code."&t=".$t."&msg=".$msg."&fontSize=".$fontSize."&fontColor=".$fontColor."&speed=".$speed."&filter=".$filter."&setting=".$setting."&alpha=".$alpha."&filterAlpha=".$filterAlpha."&filterColor=".$filterColor."&blurX=".$blurX."&blurY=".$blurY."&interval=".$interval."&lifeTime=".$lifeTime."&tweenTime=".$tweenTime."&strength=".$strength."&show=".$show;
  $sign=md5($str);
```

```html
  例如：当vid="vid",uid="uid",username="suki",code="abc",t="143020010115550947",msg="Errormessage!",fontSize="40",fontColor="0xFFE900",speed="200",filter="on",setting="3",alpha="1",filterAlpha="1",filterColor="0x3914AF",blurX="2",blurY="2",interval="5",lifeTime="3",tweenTime="1",strength="4",show="on"时，
  拼凑起来去MD5计算的字符串为
  vid=vid&uid=uid&username=suki&code=abc&status=1&t=143020010115550947&msg=Errormessage!&fontSize=40&fontColor=0xFFE900&speed=200&filter=on&setting=3&alpha=1&filterAlpha=1&filterColor=0x3914AF&blurX=2&blurY=2&interval=5&lifeTime=3&tweenTime=1&strength=4&show=on
  则sign为MD5计算后32位小写的值：8e0cdbf64c0ce98d0ef76e845f70418c
```

**- 播放器调用**

当网页调用POLYV播放器播放视频时，js通过ajax方式去请求用户的接口，需要跨域请求，会带上vid、uid、code、t这3个参数（如，http(s)://[www.mywebsite.com/validate.php?vid=vid\&uid=uid\&code=abc\&t=143020010115550947)。](http://www.mywebsite.com/validate.php?vid=vid\&uid=uid\&code=abc\&t=143020010115550947\)。)

其中code为播放代码中的参数，值为自定义（如下所示，可以不在播放代码中添加此参数，则该参数的值默认为空）；t为播放器产生的随机数。

示例代码：

```javascript
<script src='https://player.polyv.net/resp/live-h5-player/latest/liveplayer.min.js'></script>
<div id='player'></div>
<script>
var player = polyvLivePlayer({
    wrap: '#player',
    width: 800,
    height: 533,
    uid: 'uid',
    vid: 'vid',
    code : 'myCodeValue'
});
</script>
```

### 跨域

* 为了让PC端的Flash能够跨域请求用户接口，还需要用户在自己的网站域名根目录下增加crossdomain.xml文件。
* H5播放器存在跨域问题，可以在php添加以下配置解决

```javascript
  header("Access-Control-Allow-Origin: *");
```

请参考[播放器跨域](https://git.polyv.net/help-center/document-center/-/blob/master/vod/js/video_player/faq/cross_domain/README.md)

## tips

* 移动web端全屏播放时，会导致跑马灯失效


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://polyv.gitbook.io/document/docs/live/js/live-player/function/marquee.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
