jancd/qiniu-developer-faq huggingface dataset:
#  图片流量优化压缩策略

最近更新时间: 2017-02-16 12:26:06

**我们通常都希望使用七牛提供的服务对自己的图片进行压缩，这样可以在加载图片的时候减少下载流量，下面介绍一些常见的对图片进行压缩的方法:**

可以使用我们的图片处理接口：  
<http://developer.qiniu.com/docs/v6/api/reference/fop/image/imagemogr2.html>  
<http://developer.qiniu.com/docs/v6/api/reference/fop/image/imageview2.html>

本例中用到的测试图片是：  
[http://7xkr3o.com1.z0.glb.clouddn.com/testdemo.jpg](http://7xt44n.com2.z0.glb.qiniucdn.com/testdemo.jpg)  
大小：1.7 MB 分辨率：width: 790,height: 2682

**1.使用我们的 imageView2 或者 imageMogr2 接口改变图片的分辨率：**

[http://7xkr3o.com1.z0.glb.clouddn.com/testdemo.jpg?imageMogr2/thumbnail/500x](http://7xt44n.com2.z0.glb.qiniucdn.com/testdemo.jpg?imageMogr2/thumbnail/500x)  
大小：168 KB 分辨率: width: 500,height: 1697

**2.如果视频有 exif 信息的话用 strip 去除视频元信息图片 size 会降低不少：**  
可以查看图片的元信息：  
<http://7xkr3o.com1.z0.glb.clouddn.com/testdemo.jpg?exif>  
[http://7xkr3o.com1.z0.glb.clouddn.com/testdemo.jpg?imageMogr2/strip](http://7xt44n.com2.z0.glb.qiniucdn.com/testdemo.jpg?imageMogr2/strip)  
大小：360 KB 分辨率：width: 790,height: 2682

**3.如果是 jpg 图片格式的话是可以通过降低图片的 quality 来改变图片的大小:**

[http://7xkr3o.com1.z0.glb.clouddn.com/testdemo.jpg?imageMogr2/quality/50](http://7xt44n.com2.z0.glb.qiniucdn.com/testdemo.jpg?imageMogr2/quality/50)  
大小：233 KB 分辨率：width: 790,height: 2682

**4.可以通过转换图片的格式来达到改变图片的大小：**

bmp 格式比 png 要大得多，而 png 可能比 jpg 又大得多，而 jpg 又可能比 google 最新推出的 webp 格式大得多  
可以参考：  
<http://blog.csdn.net/guoer9973/article/details/44345451>

**5.以上几种方式集成在一起效果会更好：**

[http://7xkr3o.com1.z0.glb.clouddn.com/testdemo.jpg?imageMogr2/thumbnail/500x/strip/quality/50/format/webp](http://7xt44n.com2.z0.glb.qiniucdn.com/testdemo.jpg?imageMogr2/thumbnail/500x/strip/quality/50/format/webp)  
大小：69 KB 分辨率：width: 790,height: 2682

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  关于七牛音视频转码时长的说明

最近更新时间: 2017-08-28 15:25:25

使用公有队列以及私有队列处理时间不同：

1.使用公有队列

使用公有队列的转码任务，由于使用共享资源，存在任务排队的可能，所以转码时长不能保证；

2.使用私有队列

当使用私有队列进行视频转码，如果转码耗时未超过视频长度三分之一(例如一个小时的视频，转码在20分钟内完成)，则属于正常范围；如果希望加快转码速度，则用户可以部署ufop（自定义数据处理），通过提高机器性能来缩短转码时长。

  * [私有队列的创建和sdk使用](https://developer.qiniu.com/dora/kb/3853/how-to-create-audio-and-video-processing-private-queues)
  * [自定义数据处理文档](https://developer.qiniu.com/dora/manual/3687/ufop-directions-for-use)

注意：如果对于处理时长有要求的话，建议使用私有队列

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  图片处理水印不居中显示处理方法

最近更新时间: 2019-01-07 17:25:32

关于图片大水印操作，比如只指定[gravity/South](http://dn-
odum9helk.qbox.me/wjw/testpicture?imageView2/2/w/728/q/100%7Cwatermark/1/image/aHR0cDovL29kdW05aGVsay5xbnNzbC5jb20vd2p3L3dhdGVybWFyay5wbmc=/gravity/South/dy/5/dx/0)，理论上来说水印会出现在最下方中间，但是其实不是，是会有一些像素偏移的，这个时候可以加上[/dx/0](http://dn-
odum9helk.qbox.me/wjw/testpicture?imageView2/2/w/728/q/100%7Cwatermark/1/image/aHR0cDovL29kdW05aGVsay5xbnNzbC5jb20vd2p3L3dhdGVybWFyay5wbmc=/gravity/South/dy/5/dx/0)参数表示水印处于水平方向最中间，如果加上/dy/0表示在垂直方向中间位置,以下为对比的情况:

不加/dx/0

[http://dn-
odum9helk.qbox.me/wjw/testpicture?imageView2/2/w/728/q/100|watermark/1/image/aHR0cDovL29kdW05aGVsay5xbnNzbC5jb20vd2p3L3dhdGVybWFyay5wbmc=/gravity/South/dy/5](http://dn-
odum9helk.qbox.me/wjw/testpicture?imageView2/2/w/728/q/100%7Cwatermark/1/image/aHR0cDovL29kdW05aGVsay5xbnNzbC5jb20vd2p3L3dhdGVybWFyay5wbmc=/gravity/South/dy/5)

加/dx/0

[http://dn-
odum9helk.qbox.me/wjw/testpicture?imageView2/2/w/728/q/100|watermark/1/image/aHR0cDovL29kdW05aGVsay5xbnNzbC5jb20vd2p3L3dhdGVybWFyay5wbmc=/gravity/South/dy/5/dx/0](http://dn-
odum9helk.qbox.me/wjw/testpicture?imageView2/2/w/728/q/100%7Cwatermark/1/image/aHR0cDovL29kdW05aGVsay5xbnNzbC5jb20vd2p3L3dhdGVybWFyay5wbmc=/gravity/South/dy/5/dx/0)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  视频元信息响应内容的属性及说明

最近更新时间: 2017-08-28 15:38:18

# streams 输出流信息

属性 | 说明 | 属性 | 说明  
---|---|---|---  
index | 流所在的索引区域 | r_frame_rate/avg_frame_rate | 实际帧率/平均帧率  
Codec_name | 编码名 | time_base  | 时间基数(用来做timestamp计算)  
Codec_long_name; | 编码全名 | start_time | 起始时间  
Codec_type | 编码类型 | duration | 总时长  
Codec_time_base | 编码的时间戳计算基础单位 | n_frames | 帧数  
Codec_tag_string | 编码的标签数据 | handle_name | 句柄名称  
width/height | 视频的宽和高 | sample_fmt | 音频的原始采样格式  
pix_fmt | 图像显示图像色彩格式 | sample_rate | 音频的采样率  
level | 编码的level | channels | 信道数目  
  
# format 输出封装格式信息

属性 | 说明 | 属性 | 说明  
---|---|---|---  
nb_streams | 流通道数 | format_name | 封装格式  
format_long_time | 封装格式全称 | start_time | 起始时间  
duration | 总时长 | size | 文件大小  
bit_rate | 码率 |  |   
  
以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  ufop、刷新预取查询demo汇总

最近更新时间: 2019-01-04 16:29:49

# ufop java 示例 demo

  * [ufop](https://github.com/liangchao07115/qiniu-java-simple/tree/master/src/com/test)

# fusion 刷新、预取、查询 demo

  * [刷新、预取、查询](https://github.com/liangchao07115/qiniu-java-simple/tree/master/src/com/qiniu/fusion)

# c#-sdk demo

  * [c# sdk](https://developer.qiniu.com/kodo/sdk/1237/csharp#8)

# node demo

  * [node](https://github.com/qiniu/nodejs-sdk.v6/pull/208/commits/8b05c7955177fedf652c238f4368af3b21ad10de)

# python demo

  * [python](https://github.com/qiniu/python-sdk/tree/master/examples)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  七牛点播云设置CNAME解析的方法

最近更新时间: 2017-07-20 16:19:01

# 快速入门

举例说明：dianbo.qiniudemo.com

## 操作步骤：

## 1 在域名绑定页面，找到对应的域名，点击复制获取到 CNAME 的记录值

![](https://dn-odum9helk.qbox.me/FohE2YMy0zeXipPsfTQKd6BbzTtx)

## 2 登录域名管理中心，找到域名点击“解析”

注意事项：

域名管理中心在购买域名的平台里。

![](https://dn-odum9helk.qbox.me/FqkQHhzpDg4QR8JVJde22IIdod0k)

## 3 在记录管理页面，点击“添加纪录”

![](https://dn-odum9helk.qbox.me/FgOGLgKWxfpy_94d8GIg1MFyOd60)

## 4 按照提示输入内容，点击“确认”保存

注意事项：

  * 记录类型： CNAME

  * 

主机记录：dianbo （dianbo.qiniudemo.com 主域名前面部分）

  * 记录值：test-idox821.qiniudns.com（步骤1中复制获取到的内容）

  * 

其它：默认即可

![](https://dn-odum9helk.qbox.me/FigWo10NS9i2iB8cwCUxbkaIjC5M)

## 5 检查解析进度

注意事项：

需要linux终端，使用dig命令检查解析内容，下图中为解析完成后的正确结果（解析时间一般是10分钟左右生效，如果没有找到解析内容代表还没有解析成功或解析错误）

![](https://dn-odum9helk.qbox.me/Fug8P5J0qdbi0KSKAFGMRhZclr21)

## 6 设置为默认域名

![](https://dn-odum9helk.qbox.me/FkW4nHKl2IvELRMBexM-OR3IFboV)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  视频教程--命令行进行数据处理

最近更新时间: 2019-01-07 17:12:29

[pfop 数据处理视频教程](http://dn-odum9helk.qbox.me/wjw/spjc/avthumb/pfop.mov.mp4)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  如何从视频中只抽离出音频文件？

最近更新时间: 2017-08-28 15:44:26

在 音视频转码（avthumb）中可以设置`/vn/<VideoNo>`参数。
有关视频转码（avthumb）文档链接：[音视频转码](http://developer.qiniu.com/code/v6/api/dora-
api/av/avthumb.html)

**参数设置**

参数名称 | 类别 | 说明  
---|---|---  
`/vn/<VideoNo>` | V | 是否去除视频流，0为保留，1为去除。默认值为0  
  
**使用方法**

命令可以根据需要自定义，如：

    
    
    avthumb/vn/1
    

命令的调用，可以在上传时指定[persistentOps](https://developer.qiniu.com/kodo/manual/1206/put-
policy#3)参数（即 **预转持久化**
），或者调用[pfop](https://developer.qiniu.com/dora/manual/1291/persistent-data-
processing-pfop)命令（即 **触发持久化** ）。

以 Python Sdk 为例，具体可以看下[音视频转码示例](http://developer.qiniu.com/code/v6/api/dora-
api/av/avthumb.html#avthumb-
samples)。需要在[音视频转码示例](http://developer.qiniu.com/code/v6/api/dora-
api/av/avthumb.html#avthumb-samples)的基础修改数据处理命令 **fops** ，将其修改为：

    
    
    fops = avthumb/mp4/vn/1
    

**注意**

其他语言 Sdk
可在[官方Sdks](http://developer.qiniu.com/resource/official.html#sdk)下载，可以通过查看 Sdk
使用指南中 **触发持久化** ， **预转持久化** 使用。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  切片生成的ts文件只有一片的问题

最近更新时间: 2019-01-07 16:49:05

一般切片生成一片都是文件本身有问题，比如这个音频文件, 切片的时候可以指定参数/vn/1可修复，vn/1表示的是忽略视频流的信息。

比如这个mp3文件:

<http://dn-odum9helk.qbox.me/wjw/48min-66mb.mp3>

这样切片生成的文件是只有一片的:

avthumb/m3u8/segtime/10/ab/48k/ar/44100/acodec/libfaac/noDomain/1

加一个vn/1参数再次切片是正常的:

avthumb/m3u8/segtime/10/ab/48k/ar/44100/acodec/libfaac/noDomain/1/vn/1

原因如下:

Frame rate very high for a muxer not efficiently supporting it. 导致结果不符合预期

因为此音频实际含有视频流  
index":1,"codec_name":"mjpeg","codec_type":"video","start_time":"0.025056","duration":"2884.075100","bit_rate":"","nb_frames":"","width":420,"height":420,"pix_fmt":"yuvj444p","r_frame_rate":"90000/1","avg_frame_rate":"0/0","sample_aspect_ratio":"1:1","display_aspect_ratio":"1:1","tags":{},"Disposition":

{"attached_pic":1}

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  音视频转码请求的计费方法

最近更新时间: 2017-02-17 14:31:18

> 音视频转码是如何计费的？
>
> # 音频转码 价格：0.0048 元 / min , 0.288 元 / hour

### 举例：用户将一段 3min45sec 的WAV，转换输出为 3min45sec 128 KHz 的MP3

转码计费的标准为输出的声音文件的时间长度，故本次转码的费用如下

3min45sec = 3.75 min  
3.75 * 0.0048 = 0.018 元

用户承担由此产生的转码结果的存储费用。

### 视频转码 sd240 价格: 0.0057 元 / min - 0.342 元 / hour

    
    
    按照用户的输出视频面积的"长边x短边"来判断规格
    当输出的视频分辨率同时小于等于320x240，符合此规格的计费标准。
    当输出的视频分辨率一边大于320或240 则不属于该规格，如321x240，321x239，320x241，319x241等不属于该规格。
    
    举例：一段任意规格的60min钟原始视频，使用了七牛转码输出为319x240规格的60min视频，并保存在指定bucket中。
    收费以输出的结果为计费标准，则本次收费的结果如下：
    转码的费用 ： 60 * 0.0057 = 0.342 元
    
    用户承担由此产生的转码结果的存储费用。
    

### 视频转码 sd480 价格: 0.0072 元 / min - 0.432 元 / hour

    
    
    按照用户的输出视频面积的"长边x短边"来判断规格
    当输出的视频分辨率同时小于等于640x480，符合此规格的计费标准。
    当输出的视频分辨率一边大于640 或 480 则不属于该规格，如641x480,640x481,639x481,641x479, 等不属于该规格。
    
    举例：一段任意规格的60min钟原始视频，使用了七牛转码输出为629x240规格的60min视频，并保存在指定bucket中。
    收费以输出的结果为计费标准，则本次收费的结果如下：
    转码的费用 ： 60 * 0.0072 = 0.432 元
    
    用户承担由此产生的转码结果的存储费用。
    

### 视频转码 sd 价格: 0.0189 元 / min, 1.134 元 / hour

    
    
    规格说明：
    按照用户的输出视频面积的"长边x短边"来判断规格
    当输出的视频分辨率同时小于等于1080x720，符合此规格的计费标准。
    当输出的视频分辨率一边大于1080 或 720 则不属于该规格，如1077x721,1081x719,1080x721,1081x719, 等不属于该规格。
    
    举例：一段任意规格的60min钟原始视频，使用了七牛转码输出为1000x720 规格的60min视频，并保存在指定bucket中。
    收费以输出的结果为计费标准，则本次收费的结果如下：
    转码的费用 ： 60 * 0.0189 = 1.134 元
    
    用户承担由此产生的转码结果的存储费用。
    

### 视频转码 hd 价格: 0.0324 元 / min 1.944 元 / hour

    
    
    按照用户的输出视频面积的"长边x短边"来判断规格
    当输出的视频分辨率长短边中任一边大于1080x720，符合此规格的计费标准。
    当输出的视频分辨率同时小于等于1080x720 则不属于该规格，
    如1077x721,1081x719,1280x720,1081x480, 属于该规格。
    如 1080x719，1080x240，等不属于该规格
    
    举例：一段任意规格的60min钟原始视频，使用了七牛转码输出为1000x1000 规格的60min视频，并保存在指定bucket中。
    收费以输出的结果为计费标准，本次收费的结果如下：
    转码的费用：60 * 0.0324 = 1.944 元
    
    用户承担由此产生的转码结果的存储费用。
    

**注：如果使用管道功能对音视频文件进行多次转码，那么每次转码过程都会计费。**

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  新版本Chrome浏览器不支持渐进显示问题

最近更新时间: 2017-08-28 15:08:28

为提高弱网条件下web端用户访问图片的体验，七牛提供了渐进显示图片的功能，来达到网速慢时，图片可以从模糊到清晰显示的效果。

渐进显示功能支持jpg格式的图片，显示方法是在图片url后拼接 `?imageView2/<mode>/interlace/1`
字段，其中`<mode>`值可取0-5。

渐进显示图片功能是通过修改rgb的排序，达到在web端显示的效果渐进。这一效果需要客户端支持。

主流浏览器如：IE，Safari，Mozilla Firefox 均支持这一功能。

Chrome浏览器稳定版51.0.2704.106及以下的版本也支持渐进显示，但2016年7月21日发布的Chrome稳定版52.02743.82更改了图片加载方式，自此，Chrome浏览器52.02743.82及以上的版本不再支持渐进显示的功能。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  avconcat报错mismatched sar of videos的解决方法

最近更新时间: 2017-08-22 10:58:36

# 问题原因

出现该错误的原因是要进行拼接的视频SAR不匹配，即`url?avinfo`信息中的`sample_aspect_ratio`不一致。

# 解决方式

通过`avthumb`[接口](https://developer.qiniu.com/dora/manual/1248/audio-and-video-
transcoding-
avthumb)中的`aspect`字段转码下，将SAR转为一致即可，其中`aspect`字段控制的是DAR，即`url?avinfo`信息中的`display_aspect_ratio`参数。

如图所示的两个视频进行拼接就会出现上述错误，将视频一通过`avthumb/mp4/aspect/16:9`命令，将`display_aspect_ratio`转为16：9，则`sample_aspect_ratio`为1:1，此时再进行拼接，即可拼接成功。

![](https://dn-odum9helk.qbox.me/FocwQRaXWpj3_5e0ZllwoLUTdHqZ)

![](https://dn-odum9helk.qbox.me/FsBINCEKAFUUaHSYPMC_go6oA_39)

注：SAR * PAR = DAR

  * SAR —— Sample Aspect Ratio
  * PAR —— Pixel Aspect Ratio 
  * DAR —— Display Aspect Ratio 

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  图片缩放后size比原图大

最近更新时间: 2022-05-23 14:25:57

用户调用我们的imageView2或者imagemogr2接口实现图片缩放但是设置了图片质量参数 `/quality/`，发现图片的size比压缩之前大。

  * 原图（63 KB）
    
        http://7xt44n.com2.z0.glb.qiniucdn.com/%E5%8E%9F%E5%9B%BE.jpg
    

  * 处理后（ 87 KB）
    
        http://7xkt2b.com1.z0.glb.clouddn.com/原图.jpg?imageView2/2/w/308/h/308/q/100
    

​

## **问题分析**

影响图片的因素如下:

  1. 图片尺寸（像素）：同样的一张图，尺寸做得越大，图片就越大，打开就越慢； 注：尺寸和像素，都是表达图片长和宽的单位。

  2. 图片的色彩丰富程度：色彩越丰富，颜色越多样，在同样尺寸大小时，图片越大；

  3. 图片的清晰度：高清，高饱和度的图片，在同样尺寸大小时，图片越大；

  4. 图片的格式：由于压缩比不同，图片大小与图片格式.jpg .png .webp等也有关系

其中，图片的色彩丰富程度和图片的清晰度和图片的质量因素相关。

**图片分辨率对比：**

  * 原图分辨率：

{“format”:“jpeg”,“width”:580,“height”:580,“colorModel”:“ycbcr”}

  * 压缩图分辨率：

{“format”:“jpeg”,“width”:308,“height”:308,“colorModel”:“ycbcr”}

**图片质量因素对比**

可以安装ImageMagick查看图片大小色度等信息的命令

  * 原图的质量因素为90：

C:\Demo>identify -verbose http://7xkt2b.com1.z0.glb.clouddn.com/原图.jpg | grep Quality  
Quality: 90

  * 处理后图片质量因素为100：

C:\Demo>identify -verbose http://7xkt2b.com1.z0.glb.clouddn.com/原图.jpg?imageView2/2/w/308/h/308/q/100 | grep Quality  
Quality: 100

**很明显，用户增加图片的质量因素比缩小图片分辨率影响图片的size要大，关于图片质量可以参考如下：**

    
    
    保存为jpg格式为有损压缩，通俗来讲，即通过一定算法减少像素携带色彩数据的总量（注意，不是减少像素点数量）来达到压缩图片大小的效果。
    
    比方10x10像素的图片，如果每个像素携带了1种颜色数据，则最大包含了100种不同的颜色。图片无损存储时，数据是这样记录的：x排+X列像素+颜色信息/组+下一组，共100种。当使用jpg压缩时，如果压缩比选8，通过其标准算法选取其中约20%与相邻像素数据一致，这20个像素数据只需要一个同前或同后或同上或同下的一个标记，从而减少了数据记录的长度，再读取图片时这些像素点原本的颜色数据依据算法被周围某个像素数据覆盖或差值替换了，这样就实现了压缩的效果。（以上描述仅为打比方来说明原理）。rar类压缩工具的基本原理也可以这么理解，rar是把同化数据根据算法进行归纳，并不是减少而已。所以对jpg类已经有损压缩过的图片，经过专门针对图片的优化算法，同化数据很少了，再用rar，基本没什么效果。
    
    图像分辨率的减少，等于直接减少了像素的数量，当然就减少了数据的数量。
    
    通过原理来看，由于涉及到像素大小，携带颜色信息量多少，压缩比等等影响的因素很多，很难说到底哪个损失大。需要具体图片具体处理。例如纯色图片，都是一个颜色，因为颜色信息一致，都是一样的，修改像素为1x1，100x100都一样，当然用1x1就可以了。比jpg效果好太多。
    
    一般来说，日常的照片，色彩越丰富，直接减少像素对图片质量的损失比压缩成jpg要大，越简单，损失越小。另外，使用ps压缩还有一个很实用得技巧，在压缩图片时，直接修改像素大小命令尽量不用，而是通过图片变形缩小，然后裁切画布来减少像素，每个像素可保存的颜色信息远比前者要多。(可以找一张照片，直接改小像素，再改回，反复几次，然后用第二种方式反复几次，结 果第一种可能三五次图片就完全模糊了，后者虽然也模糊但效果好的多。然后再用jpg保存时，压缩比越大，获得的压缩率越低，所以一般 为8，几乎不影响，尽量不要低于6。这样尽可能保存更多的颜色信息也实现了对图片的压缩。
    
    

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  图片处理报错"invalid text color"是什么原因？

最近更新时间: 2021-07-21 10:35:44

**问题分析** ：文字水印颜色编码不正确。

**处理方案** ：水印文字颜色，RGB格式，可以是颜色名称（例如 red）或十六进制（例如
#FF0000），参考RGB颜色编码表，默认为黑色。经过URL安全的Base64编码。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  使用图片水印 watermark/1 没有打上水印

最近更新时间: 2021-07-21 10:37:33

**问题分析** ：我们默认偏移为 10，超过偏移 watermark/1 就会返回原图

    
    
    http://oepw6i5pr.qnssl.com/10221446?watermark/1/image/aHR0cDovL29lcHc2aTVwci5xbnNzbC5jb20vMTAyMjE0NDc=
    

  * 原图

“width”: 4654,“height”: 2362

  * 水印图  
“width”: 2327,“height”: 2362

**处理方案** ：重新设置dx、dy偏移量，如下：

    
    
    http://oepw6i5pr.qnssl.com/10221446?watermark/1/image/aHR0cDovL29lcHc2aTVwci5xbnNzbC5jb20vMTAyMjE0NDc=/dx/0/dy/0
    

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  提交了音视频转码，为什么长时间处于处理中？

最近更新时间: 2021-11-05 09:52:04

  * 如果希望加快转码速度，可以使用[倍速转码 __](https://developer.qiniu.com/dora/5777/avfast)，加速对视频资源进行编码。
  * 除了以上方式，也可以通过部署[ufop（自定义数据处理)__](https://developer.qiniu.com/dora/3687/ufop-directions-for-use)，通过提高机器性能来缩短转码时长。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  音视频转码失败，是什么原因？

最近更新时间: 2021-07-21 14:17:05

  * 首先 [获取转码的 persistent ID __](https://developer.qiniu.com/dora/kb/3643/how-to-acquire-persistent-id)，然后通过[持久化处理状态查询接口 __](https://developer.qiniu.com/dora/manual/1294/persistent-processing-status-query-prefop)，查看简要的报错原因。
  * 或者浏览器直接访问 `http://api.qiniu.com/status/get/prefop?id=` 后跟 persistent ID 。
  * 如果对处理失败原因有疑问，可以带着 persistent ID ，提交工单咨询。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  图片文字水印支持字体列表

最近更新时间: 2023-09-14 17:32:23

**支持字体列表如下：**

文字字体  
（需经过URL安全的Base64编码） | 中文意思 | 支持语音 | 字体样式  
（需经过URL安全的Base64编码）  
---|---|---|---  
WenQuanYi Zen Hei | 文泉驿正黑 | 中/英文 | medium  
WenQuanYi Zen Hei Mono | 文泉驿等宽正黑 | 中/英文 | medium  
WenQuanYi Micro Hei | 文泉驿微米黑 | 中/英文 | regular  
WenQuanYi Micro Hei Mono | 文泉驿等宽微米黑 | 中/英文 | regular  
Source Han Sans SC | 思源黑体 | 中/英文 | normal、heavy、extralight、regular、bold、light、medium  
Source Han Serif SC | 思源宋体 | 中/英文 | semibold、bold、extralight、regular、light、medium、heavy  
FZFangSong-Z02S | 方正仿宋 | 中/英文 | regular  
FZHei-B01S | 方正黑体 | 中/英 | regular  
FZKai-Z03S | 方正楷体 | 中/英 | regular  
FZShuSong-Z01S | 方正书宋 | 中/英 | regular  
Roboto | Roboto | 英文 | Black、BlackItalic、Bold、Italic、Light、LightItalic、Medium、MediumItalic、Regular、Thin、ThinItalic  
Marcellus | Marcellus | 英文 | Regular  
Lato | Lato | 英文 | Black、BlackItalic、Bold、BoldItalic、Italic、Light、LightItalic、Regular、Thin、ThinItalic  
Montserrat | Montserrat | 英文 | Black、Bold、ExtraBold、ExtraLight、Light、Medium、Regular、SemiBold、Thin  
Poppins | Poppins | 英文 | Bold、Light、Medium、Regular、SemiBold  
Droid Sans Fallback | Droid Sans Fallback | 中文 | Bold、Light、Medium、Regular、SemiBold  
  
以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  iOS 和 Android 端推流及播放 demo

最近更新时间: 2017-08-16 11:45:27

## Q：七牛是否有客户端推流端和播放端 demo 供演示和测试

以下为最新版本 demo，会做不定期更新

## 安卓：

<https://github.com/pili-
engineering/PLDroidMediaStreaming/tree/master/PLDroidMediaStreamingDemo>

## iOS：

<https://github.com/pili-engineering/PLMediaStreamingKit/tree/master/Example>

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  音视频播放 FAQ

最近更新时间: 2018-05-25 11:16:21

Q1: 我上传了一个 MP4 格式的视频到七牛空间，但为什么浏览器播放不了呢&为什么上传的视频播放只有声音没有图像  
---  
我们常说的 “MP4 格式” 是一种视频封装格式，而视频还有视频编码格式的概念。比较常见的视频编码格式有
H264（大部分浏览器支持）、MPEG-4（大部分浏览器不支持）、H265（大部分浏览器不支持）等。  
就目前的视频市场环境来说，使用以下方案的视频兼容性最好：  
视频封装格式：MP4； 视频编码格式：H264； 音频编码格式：AAC 或 MP3。  
  
  

Q2: 如何对存储在七牛空间里的视频进行转码？  
---  
可以使用七牛的 [音视频转码](https://developer.qiniu.com/dora/manual/1248)
服务，可以通过[官方sdk](https://developer.qiniu.com/sdk#official-
sdk)进行实现，或者直接在控制台[创建私有队列](https://developer.qiniu.com/dora/kb/3853)，在控制台使用预设参数进行转码。  
控制台转码需要使用私有队列，且只能使用预设规格，一般用于满足基本的转码需求。  
sdk转码可以定制化操作，多用于有特殊需求的转码操作。  
  
  

Q3: 如何查看存在七牛空间里的视频的编码格式？  
---  
可以使用七牛的 [音视频元信息](https://developer.qiniu.com/dora/manual/1247) 服务，在视频的链接后拼接
**?avinfo** 来查看。在返回结果中的两个 **codec_name** 参数，分别代表音频编码格式和视频编码格式。  
  
  

Q4: 我不能控制用户上传视频的格式，那么我如何维持视频格式的统一？  
---  
七牛有提供 [音视频转码](https://developer.qiniu.com/dora/manual/1248)
，可以对用户上传的每个视频，都转码成统一格式。七牛各服务端 [sdk](https://developer.qiniu.com/sdk#official-
sdk) ，都提供了提交转码请求的方法。  
  
  

Q5: 是否有兼容性更好的网页视频播放方案？  
---  
目前网页播放，比较主流的选择是在网页中嵌入播放器。这里推荐一些开源播放器：[JW
Player](http://www.jwplayer.com),[ckplayer](http://www.ckplayer.com)。  
  
  

Q6: 视频如何做到只能在线播放，不能下载？  
---  
播放其实就是一种形式的下载，所以只能播放不能下载是实现不了的，但我们可以用一些方式去避免别人下载：  
方法 1
：可以开启域名[时间戳防盗链](https://developer.qiniu.com/fusion/kb/1670)，使得视频链接只在一段时间内可以访问。  
方法 2 ：用网页播放器播放视频，可以隐藏掉播放链接。虽然链接可以通过抓包获得，但是此方法可以屏蔽掉大部分的小白用户。  
方法 3
：对原始视频进行[视频切片](https://developer.qiniu.com/dora/manual/1485)处理，达到防止直接下载完整视频的目的。  
  
  

Q7: 浏览器打开文件总是预览，如何做到直接下载？  
---  
浏览器对于支持预览的文件不会自动下载，对于存储在七牛的文件，可以通过在资源链接后拼接 **?attname=**
来进行强制下载，关于attname的详细使用，可以参考[相关文档](https://developer.qiniu.com/kodo/manual/1659)。  
  
以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  web播放器推荐

最近更新时间: 2021-05-08 15:01:45

## hls 播放器推荐

西瓜播放器  
https: https://v2.h5player.bytedance.com/generate/  
http: http://v2.h5player.bytedance.com/generate/

## rtmp 播放器推荐

mediaelement https://github.com/johndyer/mediaelement/

(如果使用mediaelement ，请用 github 上未 release 的最新版本

不然 用 release 的最新版本 会有兼容性问题)

**注意：**网页端如果播放 rtmp 或者 flv 形式
的直播流，需要flash插件支持，由于手机web端基本无法调用flash插件，所以手机web端一般使用hls（即m3u8）的形式进行直播。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  推流不成功的原因和解决方法

最近更新时间: 2023-10-10 19:39:11

一般来说，推流不成功的原因可以从以下几点着手开始排查：

  1. 推流地址错误
  2. 连接服务器失败

# 推流地址错误

七牛的 rtmp 推流地址默认需要鉴权，也就是合法的签算地址才能够正确的推流，否则都会被服务器直接 deny，鉴权方式可以参考[七牛直播推流鉴权
__](https://developer.qiniu.com/pili/kb/1332/broadcast-authentication-mode)。

# 连接服务器失败

  1. rtmp 协议默认使用的端口是 1935，客户端使用我们的 sdk 一般不会出现端口问题，如果使用服务器推流，请检查是否是 1935 没有被防火墙放行，如果没有放行，就会出现连接不到七牛服务器的问题

  2. 使用 sdk 推流，出现连接服务器失败，可以使用我们的[网络检测工具 __](https://developer.qiniu.com/fusion/kb/1324/mobile-terminal-network-test-tool-android-ios)测试一下你们的推流域名，是否正确的解析

![](https://dn-odum9helk.qbox.me/Fs9uZVO_s66ItC2aG6DT5oS0dxlz)

看下**TCP连接** 是否有节点数据返回，例如图中返回了 180.97.72.163，如果没有节点信息返回，建议换一个网络，比如换成 4G
进行测试；如果有信息返回，依旧推流不成功，可以[提交工单 __](https://support.qiniu.com/)联系我们。
提交工单时可以将用户访问这个链接的情况[DNS检测
__](http://net.qiniuts.com/#/)和对应的客户端推流log也一并打印下加快排查进度

  3. pc 端使用 OBS 推流，如果出现推流失败原因，可以先 ping 一下您的域名，看下是否通过，如果通不过，报错 unknown host，则是网络问题，可以修改 dns 为 180.76.76.76 然后测试；如果可以通过，麻烦检查一下推流地址是否过期，或者不合法，另外，OBS 填写规则是否有问题

![](https://dn-odum9helk.qbox.me/FqT_kD-gF3lv4iv6NxfEk9ZQp6fj)

  4. 推流域名都是需要做CNAME解析之后才可以使用的，刚开始使用时可以 dig 一下推流和播放域名看看解析的情况，如果域名运营商后台已经做好了配置，但是查询不到解析的话需要联系域名运营商进行帮忙查看。

# 七牛的直播抢流

七牛直播云的的一个推流URL只能同时被一个客户端推流使用；当有新的客户端调用推流URL时，默认抢流逻辑是后推流者抢占到该URL的推流使用权。  
为了预防对同一个URL的推流误用冲突，可以使用dynamic 鉴权：推流一次断开或结束，该URL就失效。  
客户如果有明确的推流抢占需求，可以在推流URL中追加的serialnum=NUM参数来定义抢占优先级。对同一个流，有以下几种抢占情况：

  * Case1：推流都带上参数serialnum时，NUM值大的推流，抢占值小的推流。
  * Case2：带上参数serialnum的推流，抢占不带参数serialnum的推流。
  * Case3：推流都不带参数serialnum时，后一个推流抢占前一个推流。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  直播推流鉴权方式

最近更新时间: 2018-12-03 10:33:03

本篇以PHP的代码为例

## 鉴权方式

### 限时鉴权方式 和无鉴权

描述:主要使用的是 Access_Key / Secret_Key 来做鉴权方式

使用 RTMP 发起推流的地址。

格式：

    
    
    rtmp://<RTMPPublishDomain>/<Hub>/<StreamKey>?e=<ExpireAt>&token=<Token>
    

说明：

参数名称 | 说明  
---|---  
RTMPPublishDomain | 直播空间绑定的 RTMP 推流域名  
Hub | 直播空间名  
StreamKey | 流名  
ExpireAt | [Unix 时间戳](https://developer.qiniu.com/kodo/glossary/1647/u)表示推流地址的过期时间。  
Token | 推流凭证  
  
生成推流凭证：

    
    
    // 构造 RTMP 推流 Path
    path = "/<Hub>/<StreamKey>"
    
    // 为推流 Path 加上过期时间
    path = "/<Hub>/<StreamKey>?e=<ExpireAt>"
    
    // 计算 HMAC-SHA1 签名，并对签名结果做 URL 安全的 Base64 编码
    sign = hmac_sha1(path, "Your_Secret_Key")
    encodedSign = urlsafe_base64_encode(sign)
    
    // 将 AccessKey 与 sign 拼接得到推流凭证
    token = "Your_Access_Key" + ":" + encodedSign
    

[URL 安全的 Base64 编码](https://developer.qiniu.com/article/kodo/kodo-
developer/appendix.html#urlsafe-base64)

示例：

    
    
    rtmp://publish-rtmp.test.com/PiliSDKTest/streamkey?e=1463023142&token=7O7hf7Ld1RrC_fpZdFvU8aCgOPuhw2K4eapYOdII:-5IVlpFNNGJHwv-2qKwVIakC0ME=
    

#### PHP案例

    
    
    require_once 'autoload.php';
    require_once"config.php";
    use Qiniu\Auth;
    $accessKey=Config::ACCESS_KEY;
    $secretKey=Config::SECRET_KEY;
    //  推流域名
    $dynamic="rtmp://pili-publish.pili.echohu.top";
    $time = time()+3600;
    //这里是/直播应用名/流名?e=当前的时间戳
    $path = "/1314xicong/huxicongp?e=".$time;
    // 计算 HMAC-SHA1 签名，并对签名结果做 URL 安全的 Base64 编码
    $sign=hash_hmac('sha1',$path,$secretKey,true);
    $data=Qiniu\base64_urlSafeEncode($sign);
    //   /直播的流名?e=<当前时间>
    $token = $accessKey.":".$data;
    $token=$dynamic.$path."&token=".$token;
    var_dump($token);
    

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  七牛直播云播放鉴权-时间戳防盗链

最近更新时间: 2017-12-11 14:13:03

> 当前直播播放鉴权配置，需要提供如下信息，提交工单。
>
>   * 直播空间名称
>   * 相应设置了防盗链的播放域名
>   * 时间戳防盗链的 key
>

基于时间戳防盗链的功能主要是：通过使用约定的加密字符串来对具有访问有效期的资源链接进行一些加密计算的到一个 sign 值，然后访问外链里面带上这个
`sign` 和`截止时间戳`去访问七牛直播节点，七牛直播节点会用同样的算法来计算访问链接是否合法，如果不合法则返回403
Forbidden，否则返回所要访问的资源。

## 算法说明

⭐️ 七牛直播云的时间戳防盗链分为两类：

  * 定制化时间戳防盗链：用户定制的时间戳防盗链。
  * portal 上标准的时间戳防盗链：指定过期时间戳播放鉴权。token的生成算法是md5, 有效时间从现在开始到 URL 中的时间戳(十六进制)为止。

⭐️ 定制化时间戳防盗链

用户定制，详细信息需要通过工单联系技术支持。

⭐️ portal 上标准的时间戳防盗链

## 签名参数

参数 | 描述  
---|---  
t | 防盗链过期时间戳的十六进制字符串  
sign | 和七牛约定好的加密字符串，由 key 和过期时间戳共同生成  
  
## 签名算法

输入信息：设置时间戳防盗链时的密钥 key，防盗链的过期时间戳的十六进制字符串 t, 播放地址的 path

签名sign生成过程: 获取到key，t 以及播放地址后，生成中间字符串 `S= key + path + t` , 然后
`sign=md5(s).to_lower()`，其中 `to_lower()` 表示生成的 md5 字符串用小写字母表示

## 签名参数传递方式

例如播放地址是：  
`http://pili-live-hls.baozijian.cc/tron/baozijian.m3u8`

最终形成的播放地址是：  
`http://pili-live-hls.baozijian.cc/tron/baozijian.m3u8?sign=xxxx&t=xxxx`

## 参考实例:

需要获取一个当前时间5分钟后过期的防盗链签名 url.

  * 播放地址为: `http://pili-live-hls.baozijian.cc/tron/baozijian.m3u8`
  * 已经开启了 portal上标准的时间戳防盗链, 设置了主密钥key为`123`

假设当前时间的时间戳为: 1513008000  
过期时间是5分钟后, 所以过期时间戳为: 1513008000 + 5 * 60 = 1513008300  
换算为16进制: 5a2eacac (一定要全小写)  
即参数 `t=5a2eacac`

中间字符串的生成规则是: `S= key + path + t`  
key 是设置时输入的密钥, 这里是 key=123  
path 是 URL 中的 path 部分, URL是`http://pili-live-
hls.baozijian.cc/tron/baozijian.m3u8`, 则 `path=/tron/baozijian.m3u8`

所以 `S=123/tron/baozijian.m3u85a2eacac`

再用 md5算法 `sign = md5(S).to_lower()`  
得到: `sign=020d379859237cb0947131d708e9c4d3`

所以最终生成的5分钟后过期的播放地址是: `http://pili-live-
hls.baozijian.cc/tron/baozijian.m3u8?sign=020d379859237cb0947131d708e9c4d3&t=5a2eacac`

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  关于直播状态回调

最近更新时间: 2022-04-25 17:17:28

## Q：新版直播状态回调在哪里设置？

在域名管理找到RTMP推流域名进行设置，目前只支持RTMP的推流域名的设置  
![](https://dn-odum9helk.qbox.me/FimL0zin2fS0INQ5bMoVGDiazaTg)  
![](https://dn-odum9helk.qbox.me/FmEEZtdOjBaU3joaBhNiaFP_Ki98)  
![image.png](https://dn-odum9helk.qbox.me/FlnyDiuxaHodXdJR5ThkCAfRk-uu)

## Q：我服务端有什么办法可以知道客户端或者推流端已经在开始推流或者结束了？

您可以在七牛PORTAL的直播产品下的域名配置页面中的进行相关配置

### 开播回调

当有新的推流连接时，会触发开播回调

### 断播回调

当推流连接断开时，会触发断播回调

### 断播延迟

为了避免在快速的断开重连场景，触发较多的回调，可以配置断播延迟。  
当推流断开，再重新开始推流，中间中断的时间低于设置的断播延迟时间时，不认为发生了断流，即不会发送通知请求。断播延迟默认为30秒，支持设置范围为1-60秒

### 回调参数

支持三种类型参数，静态参数、系统内置参数和推流URL中的参数。

系统内置参数

参数Value | 解释  
---|---  
$(title) | 流名  
$(remoteIP) | 推流客户端IP  
$(domain) | 推流域名  
$(localIP) | 服务端IP  
$(timestamp) | 回调的时间戳(秒)  
$(status) | 回调的状态  
$(sourceURL) | 推流地址, 不包括query参数部分  
$(path) | 推流地址path参数部分  
$(startTime) | 推流开始时间时间戳，单位秒  
$(endTime) | 推流结束时间时间戳，单位秒  
$(pushDurationS) | 推流持续时间，单位秒  
$(pushDurationMs) | 推流持续时间，单位毫秒  
  
  
推流URL中的参数以$(_param)表示 假设 推流Url: rtmp://127.0.0.1/hub/stream?aa=123 可以配置 $(_aa)
, 这样即可将aa=123这个参数回调至回调地址上

  
  
### 回调格式 当前支持如下三种格式 * FORM: HTTP的POST请求，参数以`application/x-www-form-
urlencoded`格式在BODY里 * GET: HTTP的GET请求，参数在请求URL中 * JSON:
HTTP的POST参数，参数`application/json`格式在BODY里

  

## 示例

配置的开播回调地址为`http://foo.com/callback`，回调格式FORM，回调参数如下

参数名Key | 参数Value  
---|---  
title | $(title)  
ip | $(remoteIP)  
status | connected  
extra | $(_extra)  
  
即如下图所示  
![image.png](https://dn-odum9helk.qbox.me/Flvyougy4TKdO7c8KNRISwRQVrk4)

推流URL为 rtmp://domain/hub/stream1?extra=foo  
则回调请求为

    
    
    POST /callback HTTP/1.1
    User-Agent: Go-http-client/1.1
    Content-Length: 58
    Authorization: Qiniu lfRUng2iBkokHegPMoQuyPaD-l725db2v1GruqD3:4qqs8YOcyJpi_LWXYQvUZe901Rk=
    Content-Type: application/x-www-form-urlencoded
    X-Reqid: iRMAAGs6zku79-EU
    Accept-Encoding: gzip
    Host: foo.com
    Cache-Control: max-age=259200
    Connection: keep-alive
    extra=foo&ip=22.73.202.226&status=connected&title=stream1
    
    

  

## Q：头信息中 Authentication 字段也可以进行验证吗？

Authentication 字段和客户端签算的 QiniuToken 是一样的，这个也可以用于回调验证

    
    
    直播回调验证 QiniuToken java 生成方法：
    
    https://github.com/pili-engineering/pili-sdk-java/blob/master/src/main/java/com/qiniu/pili/Mac.java#L23
    
    public String signRequest(URL url, String method, byte[] body, String contentType)
    
    参数解释：
    url ：客户回调服务器的 url
    method ：POST
    body ： 我们回调给客户的 body，一个 json 文件
    contentType ： application/json
    

  

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  直播流实时转码控制(多码率&服务端水印)

最近更新时间: 2021-05-08 11:40:46

## Q：如何开通实时转码？

拨打 400-808-9176 转 1 号线咨询商务，价格以及使用详情

  

## Q：实时转码可以实现哪些需求？

目前支持如下三种需求

  1. 多码率多分辨率支持，支持 480p、720p；
  2. 服务端加水印功能，推流端不受客户控制，服务端强制给视频流加上水印；
  3. 音视频编码格式转换，如强制转换 h264+aac

  

## Q：如何开启实时转码？

开启实时转码，目前需要直接调用七牛的 API 接口（此接口调用单位是单个流）:

修改流转码配置

推流开始时如果有转码配置会触发转码，推流过程中修改转码配置不会立即生效，需要重新推流。

推流过程中，在直播地址后面添加 @ 即可播放转码流。例: 一路流的直播地址是 rtmp://live-
rtmp.test.com/PiliSDKTest/streamkey， 是 720p，则对应转码流的直播地址是 rtmp://live-
rtmp.test.com/PiliSDKTest/streamkey@720p

  

## Q：API 接口是什么

请求规格如下

请求包:

    
    
    POST /v2/hubs/<Hub>/streams/<EncodedStreamKey>/converts
    Host: pili.qiniuapi.com
    Authorization: <QiniuToken>
    Content-Type: application/json
     
    {
        "converts": ["<ProfileName>", ...]
    }
    

converts: 数组，转码配置。

返回包:

    
    
    200 {}
     
    400 {
        "error": "invalid stream key" // 只能修改原始流，包含@的流不允许
    }
     
    400 {
        "error": "invalid args" // 转码配置不存在
    }
     
    612 {
        "error": "stream not found"
    }
    

示例

请求包:

    
    
    POST /v2/hubs/9527/streams/dGVzdGNvbnZlcnRz/converts HTTP/1.1
    Host: pili.qiniuapi.com
    User-Agent: pili-sdk-go/v2 go1.6 darwin/amd64
    Content-Length: 28
    Authorization: Qiniu 9roGzeeJkZh4y5gHpzT7Uv1CIw0KiVV8K4dfXRY0:prhwnWzN8A3lHHcdKXOukHRSVuQ=
    Content-Type: application/json
    X-Reqid: 5ugAAHlh58T9i1wU
    Accept-Encoding: gzip
     
    {"converts":["720p","480p"]}
    

返回包:

    
    
    HTTP/1.1 200 OK
    Content-Length: 2
    Content-Type: application/json
    Date: Wed, 29 Jun 2016 11:58:20 GMT
    X-Log: PILI:2;vs.i/vstream: stream already exists;ZEUSD:2/614;vs.u;ZEUSD:2;PILI-LINA:11
    X-Reqid: 5ugAAHlh58T9i1wU
     
    {}
    

  

## Q：如何使用实时转码？

如上述接口所示，每一次调用接口，实际是上是针对你的一个具体的直播流。即在你直播推流之前，先调用上述接口，指定一种转码的规格：即 ProfileName

目前预设的 ProfileName 有： 480p 、 720p

  

## Q：转码后的流，拉流地址做时间戳签算是否会改变？

是的，转码后的流可以认为是一路新的流，流名发生了变化，所以签算时流名要加上@720p  
或者@480p。注意，在m3u8拉流地址签算时，@720p或@480p应该加在流名后而不是m3u8后。

例如，流名为123，拉流地址签算时对123@720p.m3u8签算。

  

## Q：推流端没有办法加上水印，想从服务端加上，统一所有直播视频上都打上我的 logo 怎么做？

一般使用七牛的 sdk ，sdk 中都有方法在推流端加上水印设置；  
如果是 OBS ，推流，可以添加一个采集，选择一张图片进行水印显示  
**服务端水印** 七牛也是支持的，但是因为需要经过转发服务器，消耗资源量较大，成本因此会提高，需要先联系 400-808-9176 转2号线咨询。

  

## Q：转码后的流也可以自动存储以及回放吗？

是的，转码后的流，也属于一路新的流，和原始流享有相同的功能

  

## Q：我想修改转码配置如何操作？

即继续调用最开始提供的那个接口即可，最后针对你的单个流，提交完接口，流就会适应最后提交接口的时候里面所有的 ProfileName （取消该流转码的话，那么
ProfileName 为空数组即可）

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  关于七牛直播推流鉴权

最近更新时间: 2018-12-03 10:53:34

### 两种鉴权方式

#### 1\. expiry 时间戳鉴权

    
    
    rtmp://domain/hub/title?expire={自定义某个时间戳}&token={publishToken}
    

这种是在指定的时间戳内，可以推流。需要针对hub来设置此类鉴权，即hub内所有流都是expire鉴权。

#### 2.none 鉴权

    
    
    rtmp://<push_domain>/<hub>/<title>
    

这种鉴权方式称为无校验鉴权，不限时间也无校验

### 概念

  * title: 流名，title 是 1-200 个字符，英文+数字组成，title 格式要求：^[a-zA-Z0-9_-]{4,100}$ ，title不能重复
  * publishSecurity： 鉴权方式，如上两种。
  * PublishSecurity 鉴权方式：即鉴权方式。决定了推流地址的有效性和合法性。是应用(Hub)的属性,可以在控制台应用属性中进行修改。推流时，使用`rtmp://<HubPublishDomain>/<StreamKey>?<鉴权方式中的publishKey或token>`这样带有鉴权参数的地址，可获得推流能力。包括四种鉴权方式，static 静态推流地址/expiry限时推流地址/dynamic动态推流地址/none无鉴权方式。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  关于直播延时

最近更新时间: 2017-08-16 14:25:17

## Q：七牛直播的延时一般是多少？

七牛的直播延时一般都是 3s 左右，如果使用 hls 的播放地址，延时一般在 10s - 30s 左右

  

## Q：为什么我直播的时候使用 rtmp 和 flv ，但是延时确是大于 3秒？

可能如下原因

  1. 推流设备或者工具缓存了推流数据
  2. 播放器缓存了数据，由于缓存，导致播放的是几秒前的
  3. 由于 jitter 抖动或者网络不稳定等因素，造成的直播累加

  

## Q：有什么方法可以降低上述三种描述的延时？

#### 针对1，可以更换推流工具。 例如手机端推流的话，可以使用七牛的推流SDK：

  * 安卓推流SDK：<https://github.com/pili-engineering/PLDroidMediaStreaming>
  * IOS推流SDK：<https://github.com/pili-engineering/PLMediaStreamingKit>

#### 针对2，可以更换播放器，或者如果播放器缓存buffer可以调整的话，可以调低，但是可能造成卡顿。七牛手机端播放器的话缓存都是可以调整的：

  * 安卓播放SDK：<https://github.com/pili-engineering/PLDroidPlayer>
  * iOS播放SDK：<https://github.com/pili-engineering/PLPlayerKit>

同时也有基本无缓存的播放器可以测试播放延时： <http://www.cutv.com/demo/live_test.swf>

#### 针对3，重新加载一下播放地址即可恢复到正常延时。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  Android 推流--分辨率、帧率和码率三者之间的关系

最近更新时间: 2017-08-21 17:32:13

帧率：FPS（每秒钟要多少帧画面）； 以及Gop（表示多少秒一个I帧）  
码率：编码器每秒编出的数据大小，单位是kbps，比如800kbps代表编码器每秒产生800kb（或100KB）的数据。  
分辨率：单位英寸中所包含的像素点数； VGA：Video Graphics Array（视频图像分辨率）

三者的对应直播质量的影响因素：  
**帧率** ：影响**画面流畅度**
，与画面流畅度成正比：帧率越大，画面越流畅；帧率越小，画面越有跳动感。如果码率为变量，则帧率也会影响体积，帧率越高，每秒钟经过的画面越多，需要的码率也越高，体积也越大。帧率就是在1秒钟时间里传输的图片的帧数，也可以理解为图形处理器每秒钟能够刷新几次。

**分辨率** ：影响图像大小，与图像大小成正比：分辨率越高，图像越大；分辨率越低，图像越小。  
**清晰度:**  
在码率一定的情况下，分辨率与清晰度成反比关系：分辨率越高，图像越不清晰，分辨率越低，图像越清晰。  
在分辨率一定的情况下，码率与清晰度成正比关系，码率越高，图像越清晰；码率越低，图像越不清晰。

通过上面关系的说明，可以大概知道好的画质是分辨率、帧率和码率三者之间的平衡，下面通过一个视频流的数据量说明来更直观的感受：  
码率如果为10Mb/s，代表1秒钟有10M bit的视频数据，对于YUV422格式的1080P视频而言，一帧图像是
1920x1080x2x8/1024/1024 =
31.64Mbit，1秒钟30帧图像的话，则有949.2Mb/s，可见其数据量之大，不压缩根本无法网上传播，所以一定要经过视频压缩处理，不要以为1080P的视频就一定是高清的，清晰度还跟视频码率密切相关，对于1080P的视频而言，蓝光视频的码率是20Mb/s，一般下载的视频码率大都是10Mb/s，一些IPCamera/无人机的码率是2～8Mb/s，而很多视频网站的码率甚至低于5M/s，其实有时还不如高码率的720P清晰。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  直播延时测试

最近更新时间: 2019-12-04 17:46:37

七牛rtmp延迟测试方案

首先需要了解的是，为什么客户自己测试的网络延迟会很高，rtmp 达到 10秒，hls 达到 20秒左右。

原因很简单，因为客户通常测试采用的都是 obs 的推流，播放器采用一些软件播放器，例如 vlc 来播放 rtmp 的推流或者 hls
的推流。通常这类播放器都是存在一定的缓存 buffer ，导致延迟可能会变大等情况。

所以，测试需要按照七牛的推流 sdk 与播放 sdk ，或者推流 sdk 与七牛的网页 flash 播放器结果测试为准。

测试延迟准备

首先要确保网络是 ok 的。尽量保证是独享带宽：

直播我们一般是建议主播使用电信和联通的独享宽带。
铁通、移动、长城、鹏博士这种网络的上下行带宽都不是独享的，到了晚高峰期的时候都是共享而且上行带宽会出现即为不稳定，影响到主播推流

主播过程中可能会遇到的问题，平时常见问题是下面两个：

  1. 主播 低端机型，例如主播是 500元以下的安卓机型或者 iphone4s 以下的机型推流。  
由于硬件设施差，且在加美颜滤镜的情况下，导致的推流效果差，所以在产品层面上，  
限制低端机型主播推流，有利于观众观看的效果提升

  2. 网络环境  
目前稳定的上行一般是电信 或 联通 的独享宽带，其他宽带，例如移动、鹏博士等 wifi ，可能由于上行带宽不足或不稳定造成推流端卡顿

上面这两个问题是比较常见的，建议你们可以根据实际情况在产品层面上 fix 掉，另外在使用我们 SDK
的过程中遇到问题可以随时在这里反馈，由于每个客户的情况都是不一样的，遇到的问题也是各有不同，我们当前版本是比较稳定的，在使用方法上有问题可以在群里面随时咨询我们

首先需要按照七牛的推流 app ，以及播放 app ，因为一个人不能同时拥有两个手机，那么就可以使用七牛提供的一个测试的 flash 播放器

播放器连接为：

网页播放器

    
    
    http://7xjsbn.media1.z0.glb.clouddn.com/live_test.swf
    

app推流

    
    
    安卓：
    版本：1.2.2
    项目demo链接：https://github.com/qiniudemo/qiniu-live-android
    app链接：http://devtools.qiniu.com/QLive-v1.2.2.apk
    iOS：
    版本：1.1.0
    sdk版本：2.0.21(播放器) 1.8.0（推流端）
    最低版本：iOS7
    项目demo链接：https://github.com/qiniudemo/qiniu-live-iOS
    app链接：https://dn-devtools.qbox.me/QNPilePlayDemo-v1.1.1.html
    

app推流端的使用流程为：

  1. 首先要手机注册一下。 
  2. 然后在用户端选择录制视频。先推个几秒的视频。 
  3. 然后退回来，找到播放地址，点击复制，就能拷贝出你的播放地址了。 
  4. 重新录制（录制就是推流）准备好开始测试。

开始测试延迟

  1. 手机端开始录制推流，录制的内容选择pc的网页。在网页中百度下时间，会出现当前的时间。
  2. 同时开两个浏览器，一个显示时间，另一个用来显示播放器。
  3. 录制的时候，只录制时间。并点开播放器。
  4. pc qq 截图

结果如下，可以看到播放器播放的是之前5秒的视频，也就是延迟5秒。  
![](https://dn-odum9helk.qbox.me/FsnWQhQuD7c8K7s7ffOtHFR5Ka41)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  iOS/Android 崩溃信息搜集方法

最近更新时间: 2021-10-09 10:27:11

## iOS

iOS出现崩溃时需要按照以下步骤提供下信息:

  1. xcode 界面的完整截图，在出现崩溃的时候控制台输入

#### image lookup --address （堆栈地址）

eg：  
![](https://dn-odum9helk.qbox.me/Fkqp-4w5bkQuogJy3T32OFQ8KI29)

  1. 输入bt，提供下截图  
eg：  
![](https://dn-odum9helk.qbox.me/FgimWtHf7O_GKMo-MTDfjLBMidxX)

  2. 把日志打开，重现问题，然后提供下日志步骤如下：

#### 推流：

1）

    
    
    (BOOL)application:(UIApplication *)application didFinishLaunchingW	ithOptions:(NSDictionary *)launchOptions 
    

启动时加如下代码：

    
    
    [PLStreamingEnv setLogLevel:PLStreamLogLevelDebug];
    [PLStreamingEnv enableFileLogging];
    

2）重现问题；  
3）提取日志，取日志方法：Xcode->Window->Devices->选中对应的 App->Download
Container，下载回来的文件右键选择“显示包内容”，把 App Container/Library/Caches/Pili/Logs
这个目录下的文件打包提供下。

#### 播放：

1）开启日志

    
    
    [option setOptionValue:@(kPLLogVerbose) forKey:PLPlayerOptionKeyLogLevel];
    

2）日志存放在沙盒document下，日志名为core.txt，请复现提供该文件  
（或是按照1开启日之后经控制台内容保存成文本提供）

## Android

android 抓取log 的方法：  
unix-like 系统：

    
    
    adb shell logcat -v time thread | tee ./log.log
    

win 系统：

    
    
    adb shell logcat -v time thread > log.log
    

命令敲上之后，进行复现，复现完成之后，停止命令，然后把对应的 log.log 发过来。

导出ANR文件的命令  
anr日志的存放目录：  
\data\anr\traces.txt

    
    
    adb pull \data\anr\traces.txt ./traces.txt
    

导出到当前目录下

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  直播播放不了排查方式

最近更新时间: 2023-02-28 14:50:36

根据经验，直播播放不了与[直播卡顿的排查方式 __](https://developer.qiniu.com/pili/kb/why-live-
broadcast-caton)类似，从服务端，使用排除法进行拉流测试，具体测试方法如下几点：

  * 查看推流是否正常
  * 更换网络拉流播放
  * 更换播放器播放
  * 更换播放地址进行播放
  * dig 命令看一下域名的解析

# 1.查看推流是否正常

推流查询有**两种方式** ：一种是在`控制台查询`，另一种`调用status()接口查询`

举个例子：假设播放地址是 rtmp://pili-live-rtmp.qiniuts.com/tron/tecooler

## 控制台查询

这个推流地址在控制台的查询截图如下：  
![](https://inbox2.bz1.me/portal-pili-status.png?imageView/2/h/400)

## 调用 status() 接口查询

服务端有一个 `status()` 接口，可以获取实时的流状态，看下当前直播流是否是连接中，如果是
`disconnected`状态，那么肯定是播放不了的，下面 python 代码示例

    
    
    # github 链接地址 https://github.com/pili-engineering/pili-sdk-python/tree/v1#get-stream-status
    status = stream.status()
    print status
    

# 2.更换网络拉流播放

假如在 wifi 下播放不了，可以切换到 4G
下进行播放测试，不同运营商和不同网络间，我们提供的覆盖节点可能是不相同的，如果说在一个网络下可以播放，另外一个网络下不可以播放，那么可能出在节点问题上，或者是网络解析层面。  
`如何测试节点？`手机端测试可以使用[手机测试工具 __](https://developer.qiniu.com/fusion/kb/mobile-
terminal-network-test-tool-android-ios)  
`网络解析查询`访问一下 [ip&dns查询
__](http://tools.cloudxns.net/index.php/Index/Diag)，可以看到本地的 ip 和 dns 信息  
将这两个信息截图保存，然后提交一下工单到七牛，这边会进行测试核实，然后进行处理。

# 3.更换播放器播放

不同的播放器兼容不同的协议，一般 `rtmp` `flv` 播放协议需要 `flash` 播放器，`hls` 可以在 `safri`
上播放，浏览器是不能直接播放的，最简单的是使用我们`手机播放端的 sdk` ，网页测试可以使用 `video 标签`自己写一个 H5
的播放器；测试使用，这边推荐一个在线的[网页播放器
__](http://www.cutv.com/demo/live_test.swf)，这个播放器可以播放`rtmp` `hls`
`flv`三种格式的播放地址

# 4.更换播放地址进行播放

这个步骤一般是为了排除，`hls` 没有成功切片的问题，假如出现 `rtmp` 正常播放，但是 `hls` 播放不了，可以使用 `ffprobe`
测试一下，是否是推流端推上来的音视频编码不是标准的 `h264 + aac` ，这个情况出现的话，基本就会是这个问题。

    
    
    ➜  ~ ffprobe -hide_banner rtmp://pili-live-rtmp.qiniuts.cc/tron/qiniuts-test
    Input #0, flv, from 'rtmp://pili-live-rtmp.qiniuts.cc/tron/qiniuts-test':
      Metadata:
        major_brand     : mp42
        x-reqid         : TwRC8rSeS2cDOiRt
        compatible_brands: isommp42
        minor_version   : 0
        encoder         : Lavf57.56.100
        cdn_ip          : 61.162.231.198
      Duration: N/A, start: 0.054000, bitrate: N/A
        Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 30.30 fps, 29.97 tbr, 1k tbn, 59.94 tbc
        Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp
    

# 5.dig命令看一下域名的解析

如果上面的都试过了，还是无法播放，那么建议本地网络下，使用 `linux` 的 `dig` 命令，进行 `dns` 查询，看下是否解析成功，是否和七牛提供的
`CNAME 入口` 解析匹配

    
    
    ➜  ~ dig pili-live-rtmp.qiniuts.cc +short
    10005x3.live-rtmp.v1.pilidns.com. # 这个就是入口
    live-rtmp2.v1.pilidns.com.
    default.play.vdn.pilidns.com.
    

**七牛 CNAME 入口位置截图：**  
![](https://inbox2.bz1.me/portal-pili-cname.png?imageView/2/h/400)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  如何解决H5页面上使用 flash 推流没有声音？

最近更新时间: 2017-08-16 10:39:37

# 七牛是否提供 flash 推流的 sdk？

七牛目前有一个测试的 demo，可以参考下 `http://pili2-demo.qiniu.com/publisher`

# 使用 flash 推流，发现 rtmp 有声音，但是 hls 没有

`hls`播放地址，其实本质上播放的是音视频切片文件，因为协议标准，直播云仅支持标准的
`h264+aac`，视频`h264`没问题，但是音频却不是`aac`，一般都是`nellymoser`编码，所以导致切出来的切片没有声音，这个时候需要转码来解决这个问题。

# 解决方法

### 接入七牛实时转码服务，将音频转为 aac

**操作步骤如下：**  
1.提交工单，标注 flash 推流，音频需要转码，并且提供直播空间名  
2.工单回复配置完成之后，即已经配置实时转码  
3.直播推流，拉流时候在播放地址的流名后拼接`@nellymoser_audio`；例如：原来的播放地址为`http://pili-live-
hls.qiniu.com/qiniu/test.m3u8`，拼接后拉流地址为`http://pili-live-
hls.qiniu.com/qiniu/test@nellymoser_audio.m3u8`，使用这个拉流地址，即可实现转码，播放就会有声音了

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  Android 播放--播放器里面 demo 类的说明与选择

最近更新时间: 2021-03-17 09:38:49

目前七牛播放器SDK的demo里面有这样一些类：  
“PLMediaPlayerActivity”,  
“PLAudioPlayerActivity”,  
“PLVideoViewActivity”,  
“PLVideoTextureActivity”,

其中 Audio 肯定是指播放纯音频的，这个不用说，其他的使用方法基本相同，唯一的区别在于 PLMediaView 、PLVideoView 类使用了
SurfaceView 来完成视频画面的渲染，而 PLVideoTextureView 采用了 TextureView 完成视频画面的渲染
，因此，在这里合并在一起来介绍。

SurfaceView和TextureView

SurfaceView 和 TextureView 都继承自 android.view.View
类。它们可以从单独的线程中绘制和渲染，这是与其他视图的主要区别。 Crosswalk单独使用绘图功能，通过专用GPU线程大大提高渲染性能。

SurfaceView 提供嵌入视图层次结构内部的专用绘图表面。你可以控制这个曲面的格式和大小; SurfaceView
会将表面放置在屏幕上的正确位置。它的行为或多或少地类似于传统桌面系统上的屏幕窗口，例如，X11 系统上的 XWindow，它可以是无框的，并嵌入在另一个
XWindow 中。

以下是 SurfaceView 的两个限制：  
不能动画，变换和缩放;  
不能覆盖两个 SurfaceView。

TextureView 看起来像一个普通的 View。你可以动画，变换和缩放它，就像一个 TextView。 TextureView
只能在硬件加速窗口中使用。然而，TextureView 将消耗比 SurfaceView 更多的内存，也可能有1〜3帧延迟。

参考：  
1，http://developer.Android.com/reference/android/view/SurfaceView.html  
2，http://developer.android.com/reference/android/view/TextureView.html

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  直播封面 和 直播截图 的区别

最近更新时间: 2017-08-16 10:06:42

#### 本文档主要介绍 直播封面 和 直播截图 的区别

## 区别一： 使用方法

### 直播封面

登录后 <https://portal.qiniu.com/> ，在直播空间设置里面开启

![](https://dn-
odum9helk.qbox.me/FkMsdXHFjIOov0W-CmyYROB07nSA?imageView/0/h/250)

### 直播截图

参考： <https://developer.qiniu.com/pili/api/2520/save-the-live-capture>

## 区别二： 有效时间

### 直播封面

只在推流的时候能访问

### 直播截图

永久保存

## 区别三： 能否支持七牛图片处理接口

### 直播封面

不支持

### 直播截图

支持，具体使用方法参考：<https://developer.qiniu.com/dora/manual/1279/basic-processing-
images-imageview2>

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  关于直播流状态

最近更新时间: 2018-12-03 10:30:43

# 流状态共有两种

  * connected
  * disconnected

# 回调：

  1. 流状态发生改变都会回调 
  2. `http raw post data` 发送到回调服务器， 
    
        # 使用 curl 命令模拟 POST 请求回调服务器
    $ curl -X POST --data 'data=xxx' <url>
    

  3. 在直播空间推流域名设置中可以填写回调服务器地址  
![](https://dn-odum9helk.qbox.me/FieJ9xezvQcEIz546ZGlBxcC8iJv)  
具体的直播回调逻辑和算法参考 [关于直播状态回调](https://developer.qiniu.com/pili/kb/server-about-
the-live-status-callback)

## 关于推流状态判断：

客户端可以发送 stopStreaming 给服务端，主动断开连接，如果因为网络或者其他原因，客户端未能发送断开请求；

服务端有一个 status() 方法，查询流状态；

如果在超时时间内还未能收到断开请求，服务端就会主动将 status 置为 disconnected ；

超时时间在直播推流域名设置中可以选择，默认 30s

# FAQ

## Q：什么是流状态？

流状态指流在当下的状态描述。状态包括 connected 表示正在推流中; disconnected 表示推流终止。

## Q：stream.status 有几个状态呢？

两个状态：connected 和 disconnected

## Q：直播流状态的格式是什么样的？(可自定义回调参数)

类似于如下的格式，分别为 推流 IP 、 推流起始时间 、 连接状态 、 每秒传递字节数 、 音视频帧数等

    
    
    {
        "addr":"222.73.202.226:2572",
        "startFrom": "2015-09-10T05:58:10.289+08:00",
        "status":"connected",
        "bytesPerSecond":16870.200000000001,
        "framesPerSecond":{
            "audio":42.200000000000003,
            "video":14.733333333333333,
            "data":0.066666666666666666
        }
    }
    

## Q：disconnected 的状态产生场景有哪些？

当流的状态为持续无数据的时间超过 hub.DataTimeoutSecond (推流超时时间)，流的状态为 disconnected ，表示推流终止。

## Q：如果因为推流端网络原因直播断开，那么业务端如何判断流状态呢？

正在推流中的直播流因为网络原因或推流端的原因，造成直播流中无数据；

当持续无数据的时间超过推流中断超时饰则直播流状态变 为 disconnected ，链接断开。

hub.DataTimeoutSecond 即推流超时时间，用来描述直播流中持续无数据的时间，默认是 30s，这个值可以 在用户 portal
中的应用属性中设置。

## Q：推流状态在哪些情况下回调？

详见 [关于直播状态回调](https://developer.qiniu.com/pili/kb/server-about-the-live-
status-callback)

## Q：播放器如何判断推流端断流？

详见 [5.3.1 如何判断直播结束](https://github.com/pili-
engineering/PLDroidPlayer/wiki/5-%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8#5.3.1)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  如何在直播过程中仅播放音频或者视频？

最近更新时间: 2017-08-16 10:32:52

# 七牛直播云 rtmp 和 flv 支持音视频分离

有纯音频直播或者纯视频直播自由切换的功能，上行推流端或者主播推流包含音视频的直播，可以自由选择纯音频或者纯视频直播。

## 使用方式

### 只下发音频

在 URL 中添加 `only-audio=1`，**目前支持 RTMP、FLV**  
示例:  
RTMP: `rtmp://pili-live-rtmp.qiniu.com/qiniu/test?only-audio=1`  
FLV: `http://pili-live-hls.qiniu.com/qiniu/test.flv?only-audio=1`

### 只下发视频

在 URL 中添加 `only-video=1`，**目前支持 RTMP、FLV**  
示例:  
RTMP: `rtmp://pili-live-rtmp.qiniu.com/qiniu/test?only-video=1`  
FLV: `http://pili-live-hls.qiniu.com/qiniu/test.flv?only-video=1`

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  推流&连麦SDK推荐配置

最近更新时间: 2017-08-16 10:29:35

# 使用直播SDK的机型配置推荐

由于直播推流以及连麦都是高消耗的操作，所以对手机的CPU以及内存消耗占用较高。如果手机机型太低配，可能造成直播效果不佳，所以此文档目的意在介绍下推荐的直播机型配置

## 安卓

### 推荐机型：

三星S7 HTC M9w 华为P9/华为荣耀8 小米5/小米5s/红米Note 4X/红米Note3 LG Nexus 5X vivo X9 OPPO
R9s

### 推荐配置：

版本：Android原生4.3以上（录屏、美颜和连麦功能需要Android原生5.0以上系统支持） 处理器：骁龙808处理器平台 内存：2GB
摄像头（后置/前置）: 1300万像素/500万像素 显示屏：4.3英寸（1920*1080分辨率）

## IOS

### 推荐机型及配置：

iPhone SE 及以上 （录屏、美颜和连麦功能需要iPhone6s及以上系统才能保证良好的体验效果）

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  为什么直播播放卡顿

最近更新时间: 2019-11-07 10:04:08

一般直播测试或者直播接入过程中，经常会遇到直播卡顿的问题，直播卡顿造成的原因大部分是网络不好造成的，网络不好不仅仅存在于观众播放端，也有可能是出现在主播推流端，首先需要了解一点：上行推流卡顿，播放必定卡。  
  

# 一 卡顿排查步骤

## 1 本地测试播放

首先获取到直播流在七牛的播放地址，rtmp hls flv 三种任意一种，然后放到
[网页播放器](http://www.cutv.com/demo/live_test.swf)
中进行播放测试，最好可以三种地址都试一下，以便排除个别协议问题造成的卡顿

## 2 查询推流端

一般来说，如果造成卡顿，三种播放地址是都会卡的，这个时候需要先从根源查起，先看下推流端的情况，具体的查询步骤如下：

    
    
    ① 登录 https://portal.qiniu.com/hub 进入直播空间  
    ② 在直播空间中找到对应的直播流  
    ③ 这边可以看到具体的推流历史记录  
    

![](https://inbox2.bz1.me/tron-title-history.png?imageView/2/h/400)

根据推流历史信息，这边可以看到具体的音频视频和码率截图，可以初步判断出主播上行的推流质量，这三条曲线抖动严重，可以让主播测试一下上行网络带宽情况，[在线带宽测试](http://www.speedtest.net/)
，一般上行带宽最好稳定在 10M 以上，这样的带宽可以支撑主播的稳定推流。如果带宽不够高，最好是可以保证带宽独享，在同一个 wifi
下，不要用大量的带宽占用行为出现，比如下载。主播如果测试网络正常的情况下，可以让主播在命令行模式下ping一下对应的推流域名看看具体访问到的节点。

## 3 查询播放端

这个在看到推流历史信息统计图，是平稳顺畅的时候，直播还是卡顿，很有可能就是本地的网络不好，网络不好的比对值是直播的码率，假如推流是 1M
的码率，那么观看端至少是 8M 以上的带宽才能够支持这个直播流。测试方法同上 [在线带宽测试](http://www.speedtest.net/)

## 4 卡顿还有一种原因是在七牛的直播云上

这种是需要在前两种测试过后，发现都正常 ok，那么提交工单或者拨打400-808-9176到七牛，让技术支持查一下卡顿原因，需要提供的信息如下

    
    
    ① 提供一下具体的播放地址  
    ② 本地 ping 一下播放的域名，会返回节点信息，这个节点就是七牛直播云的节点，也是你访问到的节点  
    ③ 简单描述下推流方式，比如说：七牛 sdk 推流、obs 推流、特殊编码器推流等等  
    

**附：手机端ping测试可以使用**[手机测试工具](https://developer.qiniu.com/fusion/kb/mobile-
terminal-network-test-tool-android-
ios)本地IP/DNS检测工具[DNS检测](http://tools.cloudxns.net/index.php/Index/Diag)

# 二 卡顿解决方式

## 1 切换网络

测试出来是网络带宽不够，或者不稳定导致的直播卡顿，建议换一个 wifi，或者从 wifi 切换到 4G

## 2 推流端重发数据

推流端重新推流一次，一般操作是重启应用

## 3 更换节点推流

这种方式一般是为了排除是否是推流到的某个边缘节点的问题导致，可以从另一个网络或者其他区域的主机上 ping 推流域名，然后拿到节点，进行 host
绑定，然后推流。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  七牛直播云主动回源拉流

最近更新时间: 2018-12-28 17:26:32

# 简述

一些特定的业务需求，自己搭建了流媒体服务器，使用 rtmp
推流到自己的节点服务器，但是受限于播放并发量和延迟，服务器负载不了的情况下，可以配置七牛直播云主动回源拉流，然后通过七牛的直播云节点进行分发。  

# 优势

1.减小源站服务器负载压力  
2.缩短直播延迟，提高实时性  
3.直播落存储到七牛，节省源站存储空间，备份数据，有转码需求七牛也可以提供  

# 支持源站的视频封装格式

格式 | 支持 | 示例格式  
---|---|---  
RTMP | V | `rtmp://a.com/live/test`  
FLV | V | `http://a.com/live/test.flv`  
HLS | X | X  
  
# 如何提交配置

请提交 [工单](https://support.qiniu.com/tickets/category) ，说明如下配置详情：  
1.**提供源站的播放地址**  
2.**七牛账号** ，**七牛的直播空间名称** ，以及需要配置的**播放域名**  

# 工作流程

假如配置到七牛 `b.com` 播放域名上，源站地址为 `rtmp://a.com/live/test` 则回源拉流配置后，使用七牛的播放地址为  
`rtmp://b.com/<直播空间名>/test`  
`http://b.com/<直播空间名>/test.m3u8`  
`http://b.com/<直播空间名>/test.flv`  
假如请求了三个地址中任意一个，会直接触发七牛直播云进行向 `rtmp://a.com/live/test` 的回源拉流请求。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  直播HTTPDNS调度

最近更新时间: 2021-11-04 20:25:40

## 背景

由于客户端网络环境复杂，部分地区的DNS服务器无法正确返回预期的结果，  
为了避免解析不出七牛的节点去播放可以利用七牛的IP调度的接口

## 接口

    
    
    GET /v1/query/<Method>?domain=<Domain>&clientIP=<ClientIP>
    Host: pili-ipswitch.qiniuapi.com
    200 OK
    {
      "items": [
        {
          "ip": "<IP1>"
        },
        {
          "ip": "<IP2>"
        }
     
      ] 
     "ttl": <TTL>
    }
    

Method: 请求类型，支持推流(publish)/播放(play)两类配置  
  
Domain: 播放或者推流的域名  
  
ClientIP :客户端IP  
  
IP: 服务节点IP, 例如"183.136.233.189"  
  
TTL: 有效缓存时间，单位为秒  

## 举例

### 推流

例子: 希望使用推流域名`pili-publish.qiniu.com`，从上海电信(222.73.202.226)进行推流，请求七牛HTTPDNS服务

    
    
     curl  "http://pili-ipswitch.qiniuapi.com/v1/query/publish?domain=pili-publish.qiniu.com&clientIP=222.73.202.226" -i
     HTTP/1.1 200 OK
     Server: openresty
     Date: Fri, 08 Nov 2019 10:30:08 GMT
     Content-Type: application/json
     Content-Length: 716
     Connection: keep-alive
     X-Log: PILI-IPSWITCH
     X-Reqid: OohltOQHsEPFXcKd
    
    {
      "items": [
        {
          "ip": "180.101.136.154"
        },
        {
          "ip": "180.101.136.155"
        }
      ]
      "ttl": 60
    }
    

从返回值中随意取一个ip作为推流IP  

推流URL拼接

    
    
    rtmp://180.101.136.154/live/stream?key=676c9a66-08e7-473b-a2f4-321ddc770438&domain=pili-publish.qiniu.com
    

### 播放

例子：希望使用推流域名`pili-live.qiniu.com`，从上海电信(222.73.202.226)进行推流，请求七牛HTTPDNS服务

    
    
    curl "http://pili-ipswitch.qiniuapi.com/v1/query/play?domain=pili-live.qiniu.com&clientIP=222.73.202.226" -i
    HTTP/1.1 200 OK
    Server: openresty
    Date: Wed, 07 Jun 2017 01:58:57 GMT
    Content-Type: application/json
    Content-Length: 716
    Connection: keep-alive
    X-Log: PILI:1;PILI-ZEUSD:2;PILI-IPSWITCH:34
    X-Reqid: cl_get1b4V03WVCq
    
    {
      "items": [
        {
          "ip": "183.136.233.189"
        },
        {
          "ip": "183.136.233.188"
        }
      ]
      "ttl": 60
    }
    

从返回值中随意取一个ip作为拉流IP  
  
播放url

    
    
    rtmp://183.136.233.189/live/stream?domain=pili-live.qiniu.com
    

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交