You need to enable JavaScript to run this app.
导航

拉流转推

最近更新时间2024.04.15 11:37:01

首次发布时间2023.12.28 21:21:52

阅读本文,您可以获取 Go SDK 拉流转推的接口调用示例,实现快速开发。

说明

本文的调用示例包含接口的全部参数。由于参数间可能存在互斥关系,在调用时,请您参考注释,进行调整。

调用说明

  • 本文提供的接口调用示例均通过 AK 和 SK 初始化实例。
  • 接口的参数说明和错误码等信息可通过接口文档或打开 API Explorer文档说明页签查看。

前提条件

调用接口前,请先完成 Go SDK 的安装及初始化操作

调用示例

本节为您介绍拉流转推相关接口的功能和调用示例。

创建拉流转推任务

您可以调用 CreatePullToPushTask 接口创建拉流转推任务。详细的参数说明可参见 CreatePullToPushTask 接口文档。

接口调用示例如下所示。

package main

import (
    "os"
    "context"
    "fmt"

    "github.com/volcengine/volc-sdk-golang/base"
   	"github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func main () {
  // 强烈建议不要把 AccessKey ID 和 AccessKey Secret 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
  // 本示例通过从环境变量中读取 AccessKey ID 和 AccessKey Secret,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 ACCESS_KEY_ID 和 ACCESS KEY_SECRET
  service := live_v20230101.NewInstance()

  service.SetCredential(base.Credentials{
    AccessKeyID:     os.Getenv("ACCESS_KEY_ID"),
    SecretAccessKey: os.Getenv("ACCESS_KEY_SECRET"),
  })

  body := &live_v20230101.CreatePullToPushTaskBody{}
     
  //拉流转推任务的名称,由 1 到 20 位中文、大小写字母和数字组成,默认为空,表示不配置任务名称。
  var bodyTitle *string 

  var bodyTitleValue string = "task001" 

  bodyTitle = &bodyTitleValue 

  body.Title = bodyTitle 
    
  //任务的开始时间,Unix 时间戳,单位为秒。
  // note:
  // 拉流转推任务持续时间最长为 7 天。
  body.StartTime = 1640891476
    
  //任务的结束时间,Unix 时间戳,单位为秒。
  // note:
  // 拉流转推任务持续时间最长为 7 天。
  body.EndTime = 1640841476
    
  //接收拉流转推任务状态回调的地址,最大长度为 2000 个字符,默认为空。
  var bodyCallbackURL *string 

  var bodyCallbackURLValue string = "http://example.mtime.cn/live/example/callbackapi" 

  bodyCallbackURL = &bodyCallbackURLValue 

  body.CallbackURL = bodyCallbackURL 
    
  //拉流来源类型,支持的取值及含义如下。
  // <li> 0:直播源; </li>
  // <li> 1:点播视频。 </li>
  body.Type = 0
    
  //点播视频文件循环播放模式,当拉流来源类型为点播视频(Type 为 1)时为必选参数,参数取值及含义如下所示。
  // <li> -1:无限循环,至任务结束; </li>
  // <li> 0:有限次循环,循环次数为 PlayTimes 取值为准。 </li>
  var bodyCycleMode *int32 

  var bodyCycleModeValue int32 = -1 

  bodyCycleMode = &bodyCycleModeValue 

  body.CycleMode = bodyCycleMode 
    
  //推流地址,即直播源或点播视频转推的目标地址。
  var bodyDstAddr *string 

  var bodyDstAddrValue string = "rtmp://example.mtime.cn/Video/2022/02/04/mp4/190204084208765161.mp4" 

  bodyDstAddr = &bodyDstAddrValue 

  body.DstAddr = bodyDstAddr 
    
  //直播源的拉流地址,拉流来源类型为直播源(Type 为 0)时,为必选参数,最大长度为 1000 个字符。
  var bodySrcAddr *string 

  var bodySrcAddrValue string = "http://example.mtime.cn/Video/2003/02/04/mp4/190204084208765161.mp4" 

  bodySrcAddr = &bodySrcAddrValue 

  body.SrcAddr = bodySrcAddr 
    
  //点播视频播放地址列表,拉流来源类型为点播视频(Type 为 1)时,为必选参数,最多支持传入 30 个点播视频播放地址,每个地址最大长度为 1000 个字符。
  bodySrcAddrS := []*string{}

  var bodySrcAddrS0 *string 

  var bodySrcAddrS0Value string  = "https://pull.example.com/live/stream-123" 

  bodySrcAddrS0 = &bodySrcAddrS0Value 

  bodySrcAddrS = append(bodySrcAddrS, bodySrcAddrS0)    

  body.SrcAddrS = bodySrcAddrS
    
  //点播视频文件循环播放次数,当循环播放模式为有限次循环(CycleMode为0)时为必选参数。
  var bodyPlayTimes *int32 

  var bodyPlayTimesValue int32 = 3 

  bodyPlayTimes = &bodyPlayTimesValue 

  body.PlayTimes = bodyPlayTimes 
    
  //推流域名,推流地址(DstAddr)为空时必传;反之,则该参数不生效。
  var bodyDomain *string 

  var bodyDomainValue string = "example.mtime.cn" 

  bodyDomain = &bodyDomainValue 

  body.Domain = bodyDomain 
    
  //推流应用名称,推流地址(DstAddr)为空时必传;反之,则该参数不生效。
  var bodyApp *string 

  var bodyAppValue string = "live" 

  bodyApp = &bodyAppValue 

  body.App = bodyApp 
    
  //推流的流名称,推流地址(DstAddr)为空时必传;反之,则该参数不生效。
  var bodyStream *string 

  var bodyStreamValue string = "stream-123" 

  bodyStream = &bodyStreamValue 

  body.Stream = bodyStream 
    
  //为拉流转推视频添加的水印配置信息。
  bodyWatermark := live_v20230101.CreatePullToPushTaskBodyWatermark{}

  //水印图片字符串,图片最大 2MB,最小 100Bytes,最大分辨率为 1080×1080。图片 Data URL 格式为:`data:image/<mediatype>;base64,<data>`。
  // <li> `mediatype`:图片类型,支持 png、jpg、jpeg 格式; </li>
  // <li> `data`:base64 编码的图片字符串。 </li>
  // 例如,`data:image/png;base64,iVBORw0KGg****mCC`
  bodyWatermark.Picture = "data:image/png;base64,iVBORw0KGg\*\*\*\*mCC"
    
  //水平偏移,表示水印左侧边与转码流画面左侧边之间的距离,使用相对比率,取值范围为 [0,1)。
  bodyWatermark.RelativePosX = 0.1
    
  //垂直偏移,表示水印顶部边与转码流画面顶部边之间的距离,使用相对比率,取值范围为 [0,1)。
  bodyWatermark.RelativePosY = 0.1
    
  //水印宽度占直播原始画面宽度百分比,支持精度为小数点后两位。
  bodyWatermark.Ratio = 0.1
    
  
  body.Watermark = &bodyWatermark
     
    
  //是否开启点播预热,开启点播预热后,系统会自动将点播视频文件缓存到 CDN 节点上,当用户请求直播时,可以直播从 CDN 节点获取视频,从而提高直播流畅度。
  // 拉流来源类型为点播视频(Type 为 1)时,参数生效。
  // <li> 0:不开启; </li>
  // <li> 1:开启(默认值)。 </li>
  var bodyPreDownload *int32 

  var bodyPreDownloadValue int32 = 1 

  bodyPreDownload = &bodyPreDownloadValue 

  body.PreDownload = bodyPreDownload 
    
  //点播文件启播时间偏移值,单位为秒,数量与拉流地址列表中地址数量相等,缺省情况下为空表示不进行偏移。
  // 拉流来源类型为点播视频(Type 为 1)时,参数生效。
  bodyOffsetS := []*float32{}

  var bodyOffsetS0 *float32 

  var bodyOffsetS0Value float32  = 1.1 

  bodyOffsetS0 = &bodyOffsetS0Value 

  bodyOffsetS = append(bodyOffsetS, bodyOffsetS0)    

  body.OffsetS = bodyOffsetS
    
  //续播策略,续播策略指转推点播视频进行直播时出现断流并恢复后,如何继续播放的策略,拉流来源类型为点播视频(Type 为 1)时参数生效,支持的取值及含义如下。
  // <li> 0:从断流处续播(默认值); </li>
  // <li> 1:从断流处+自然流逝时长处续播。 </li>
  var bodyContinueStrategy *int32 

  var bodyContinueStrategyValue int32 = 9 

  bodyContinueStrategy = &bodyContinueStrategyValue 

  body.ContinueStrategy = bodyContinueStrategy 
    
  //点播文件启播时间偏移值,单位为秒,仅当点播视频播放地址列表(SrcAddrS)只有一个地址,且未配置 Offsets 时生效,缺省情况下为空表示不进行偏移。
  var bodyOffset *float32 

  var bodyOffsetValue float32 = 30 

  bodyOffset = &bodyOffsetValue 

  body.Offset = bodyOffset
  
  resp, err := service.CreatePullToPushTask(context.Background(), body)

  if err != nil {
    fmt.Printf("error %v", err)
  } else {
    fmt.Printf("success %+v", resp)
  }
}

删除拉流转推任务

您可以调用 DeletePullToPushTask 接口删除拉流转推任务。详细的参数说明可参见 DeletePullToPushTask 接口文档。

接口调用示例如下所示。

package main

import (
    "os"
    "context"
    "fmt"

    "github.com/volcengine/volc-sdk-golang/base"
   	"github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func main () {
  // 强烈建议不要把 AccessKey ID 和 AccessKey Secret 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
  // 本示例通过从环境变量中读取 AccessKey ID 和 AccessKey Secret,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 ACCESS_KEY_ID 和 ACCESS KEY_SECRET
  service := live_v20230101.NewInstance()

  service.SetCredential(base.Credentials{
    AccessKeyID:     os.Getenv("ACCESS_KEY_ID"),
    SecretAccessKey: os.Getenv("ACCESS_KEY_SECRET"),
  })

  body := &live_v20230101.DeletePullToPushTaskBody{}
     
  //任务 ID,任务的唯一标识,您可以通过[获取拉流转推任务列表](https://www.volcengine.com/docs/6469/1126896)接口获取。
  body.TaskID = "8fde6aa0281d9f*******05a6e242365"
  
  resp, err := service.DeletePullToPushTask(context.Background(), body)

  if err != nil {
    fmt.Printf("error %v", err)
  } else {
    fmt.Printf("success %+v", resp)
  }
}

更新拉流转推任务

您可以调用 UpdatePullToPushTask 接口更新拉流转推任务。详细的参数说明可参见 UpdatePullToPushTask 接口文档。

接口调用示例如下所示。

package main

import (
    "os"
    "context"
    "fmt"

    "github.com/volcengine/volc-sdk-golang/base"
   	"github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func main () {
  // 强烈建议不要把 AccessKey ID 和 AccessKey Secret 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
  // 本示例通过从环境变量中读取 AccessKey ID 和 AccessKey Secret,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 ACCESS_KEY_ID 和 ACCESS KEY_SECRET
  service := live_v20230101.NewInstance()

  service.SetCredential(base.Credentials{
    AccessKeyID:     os.Getenv("ACCESS_KEY_ID"),
    SecretAccessKey: os.Getenv("ACCESS_KEY_SECRET"),
  })

  body := &live_v20230101.UpdatePullToPushTaskBody{}
     
  //拉流转推任务的名称,由 1 到 20 位中文、大小写字母和数字组成,默认为空,表示不修改任务名称。
  var bodyTitle *string 

  var bodyTitleValue string = "task001" 

  bodyTitle = &bodyTitleValue 

  body.Title = bodyTitle 
    
  //任务 ID,任务的唯一标识,您可以通过[获取拉流转推任务列表](https://www.volcengine.com/docs/6469/1126896)接口获取。
  body.TaskID = "8fde6aa0281*********59a6e242365"
    
  //任务的开始时间,Unix 时间戳,单位为秒。
  // note:
  // 拉流转推任务持续时间最长为 7 天。
  body.StartTime = 1640891476
    
  //任务等结束时间,Unix 时间戳,单位为秒。
  // note:
  // 拉流转推任务持续时间最长为 7 天。
  body.EndTime = 1640891976
    
  //接收拉流转推任务状态回调的地址,最大长度为 2000 个字符。
  var bodyCallbackURL *string 

  var bodyCallbackURLValue string = "http://example.mtime.cn/live/example/callbackapi" 

  bodyCallbackURL = &bodyCallbackURLValue 

  body.CallbackURL = bodyCallbackURL 
    
  //拉流来源类型,支持的取值及含义如下。
  // <li> 0:直播源; </li>
  // <li> 1:点播视频。 </li>
  body.Type = 0
    
  //点播视频文件循环播放模式,当拉流来源类型为点播视频(Type 为 1)时为必选参数,参数取值及含义如下所示。
  // <li> -1:无限循环,至任务结束; </li>
  // <li> 0:有限次循环,循环次数为 PlayTimes 取值为准。 </li>
  var bodyCycleMode *int32 

  var bodyCycleModeValue int32 = -1 

  bodyCycleMode = &bodyCycleModeValue 

  body.CycleMode = bodyCycleMode 
    
  //推流地址,即直播源或点播视频转推的目标地址。
  var bodyDstAddr *string 

  var bodyDstAddrValue string = "rtmp://example.mtime.cn/Video/2022/02/04/mp4/190204084208765161.mp4" 

  bodyDstAddr = &bodyDstAddrValue 

  body.DstAddr = bodyDstAddr 
    
  //直播源的拉流地址,拉流来源类型为直播源(Type 为 0)时,为必选参数,最大长度为 1000 个字符。
  var bodySrcAddr *string 

  var bodySrcAddrValue string = "http://example.mtime.cn/Video/2003/02/04/mp4/190204084208765161.mp4" 

  bodySrcAddr = &bodySrcAddrValue 

  body.SrcAddr = bodySrcAddr 
    
  //点播视频播放地址列表,拉流来源类型为点播视频(Type 为 1)时,为必选参数,最多支持传入 30 个点播视频播放地址,每个地址最大长度为 1000 个字符。
  bodySrcAddrS := []*string{}

  var bodySrcAddrS0 *string 

  var bodySrcAddrS0Value string  = "http://example.mtime.cn/Video/2003/02/04/mp4/190204084208765161.mp4" 

  bodySrcAddrS0 = &bodySrcAddrS0Value 

  bodySrcAddrS = append(bodySrcAddrS, bodySrcAddrS0)    

  body.SrcAddrS = bodySrcAddrS
    
  //推流的流名称,推流地址(DstAddr)为空时必传;反之,则该参数不生效
  var bodyStream *string 

  var bodyStreamValue string = "stream-123" 

  bodyStream = &bodyStreamValue 

  body.Stream = bodyStream 
    
  //推流应用名称,推流地址(DstAddr)为空时必传;反之,则该参数不生效
  var bodyApp *string 

  var bodyAppValue string = "live" 

  bodyApp = &bodyAppValue 

  body.App = bodyApp 
    
  //推流域名,推流地址(DstAddr)为空时必传;反之,则该参数不生效
  var bodyDomain *string 

  var bodyDomainValue string = "push.example.com" 

  bodyDomain = &bodyDomainValue 

  body.Domain = bodyDomain 
    
  //为拉流转推视频添加的水印配置信息。
  bodyWatermark := live_v20230101.UpdatePullToPushTaskBodyWatermark{}

  //水印图片字符串,图片最大 2MB,最小 100Bytes,最大分辨率为 1080×1080。图片 Data URL 格式为:`data:image/<mediatype>;base64,<data>`。
  // <li> mediatype:图片类型,支持 png、jpg、jpeg 格式; </li>
  // <li> data:base64 编码的图片字符串。 </li>
  // 例如,`data:image/png;base64,iVBORw0KGg****mCC`
  bodyWatermark.Picture = "data:image/png;base64,iVBORw0KGg\*\*\*\*mCC"
    
  //水平偏移,表示水印左侧边与转码流画面左侧边之间的距离,使用相对比率,取值范围为 [0,1)。
  bodyWatermark.RelativePosX = 0.1
    
  //垂直偏移,表示水印顶部边与转码流画面顶部边之间的距离,使用相对比率,取值范围为 [0,1)。
  bodyWatermark.RelativePosY = 0.1
    
  //水印宽度占直播原始画面宽度百分比,支持精度为小数点后两位。
  bodyWatermark.Ratio = 0.1
    
  
  body.Watermark = &bodyWatermark
     
    
  //是否开启点播预热,开启点播预热后,系统会自动将点播视频文件缓存到 CDN 节点上,当用户请求直播时,可以直播从 CDN 节点获取视频,从而提高直播流畅度。
  // 拉流来源类型为点播视频(Type 为 1)时,参数生效。
  // <li> 0:不开启; </li>
  // <li> 1:开启(默认值)。 </li>
  var bodyPreDownload *int32 

  var bodyPreDownloadValue int32 = 1 

  bodyPreDownload = &bodyPreDownloadValue 

  body.PreDownload = bodyPreDownload 
    
  //点播文件启播时间偏移值,单位为秒,数量与拉流地址列表中地址数量相等,缺省情况下表示不进行偏移。
  // 拉流来源类型为点播视频(Type 为 1)时,参数生效。
  bodyOffsetS := []*float32{}

  var bodyOffsetS0 *float32 

  var bodyOffsetS0Value float32  = 1.1 

  bodyOffsetS0 = &bodyOffsetS0Value 

  bodyOffsetS = append(bodyOffsetS, bodyOffsetS0)    

  body.OffsetS = bodyOffsetS
    
  //续播策略,续播策略指转推点播视频进行直播时出现断流并恢复后,如何继续播放的策略,拉流来源类型为点播视频(Type 为 1)时参数生效,支持的取值及含义如下。
  // <li> 0:从断流处续播(默认值); </li>
  // <li> 1:从断流处+自然流逝时长处续播。 </li>
  var bodyContinueStrategy *int32 

  var bodyContinueStrategyValue int32 = 9 

  bodyContinueStrategy = &bodyContinueStrategyValue 

  body.ContinueStrategy = bodyContinueStrategy 
    
  //点播文件启播时间偏移值,单位为秒,仅当点播视频播放地址列表(SrcAddrS)只有一个地址,且未配置 Offsets 时生效,缺省情况下表示不进行偏移。
  var bodyOffset *float32 

  var bodyOffsetValue float32 = 30 

  bodyOffset = &bodyOffsetValue 

  body.Offset = bodyOffset 
    
  //点播视频文件循环播放次数,当循环播放模式为有限次循环(CycleMode为0)时为必选参数。
  var bodyPlayTimes *int32 

  var bodyPlayTimesValue int32 = 3 

  bodyPlayTimes = &bodyPlayTimesValue 

  body.PlayTimes = bodyPlayTimes
  
  resp, err := service.UpdatePullToPushTask(context.Background(), body)

  if err != nil {
    fmt.Printf("error %v", err)
  } else {
    fmt.Printf("success %+v", resp)
  }
}

启用拉流转推任务

您可以调用 RestartPullToPushTask 接口启用拉流转推任务。详细的参数说明可参见 RestartPullToPushTask 接口文档。

接口调用示例如下所示。

package main

import (
    "os"
    "context"
    "fmt"

    "github.com/volcengine/volc-sdk-golang/base"
   	"github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func main () {
  // 强烈建议不要把 AccessKey ID 和 AccessKey Secret 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
  // 本示例通过从环境变量中读取 AccessKey ID 和 AccessKey Secret,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 ACCESS_KEY_ID 和 ACCESS KEY_SECRET
  service := live_v20230101.NewInstance()

  service.SetCredential(base.Credentials{
    AccessKeyID:     os.Getenv("ACCESS_KEY_ID"),
    SecretAccessKey: os.Getenv("ACCESS_KEY_SECRET"),
  })

  body := &live_v20230101.RestartPullToPushTaskBody{}
     
  //任务 ID,任务的唯一标识,您可以通过[获取拉流转推任务列表](https://www.volcengine.com/docs/6469/1126896)接口获取。
  body.TaskID = "8fde6aa0281d********986e242365"
  
  resp, err := service.RestartPullToPushTask(context.Background(), body)

  if err != nil {
    fmt.Printf("error %v", err)
  } else {
    fmt.Printf("success %+v", resp)
  }
}

停用拉流转推任务

您可以调用 StopPullToPushTask 接口停用拉流转推任务。详细的参数说明可参见 StopPullToPushTask 接口文档。

接口调用示例如下所示。

package main

import (
    "os"
    "context"
    "fmt"

    "github.com/volcengine/volc-sdk-golang/base"
   	"github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func main () {
  // 强烈建议不要把 AccessKey ID 和 AccessKey Secret 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
  // 本示例通过从环境变量中读取 AccessKey ID 和 AccessKey Secret,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 ACCESS_KEY_ID 和 ACCESS KEY_SECRET
  service := live_v20230101.NewInstance()

  service.SetCredential(base.Credentials{
    AccessKeyID:     os.Getenv("ACCESS_KEY_ID"),
    SecretAccessKey: os.Getenv("ACCESS_KEY_SECRET"),
  })

  body := &live_v20230101.StopPullToPushTaskBody{}
     
  //任务 ID,任务的唯一标识,您可以通过[获取拉流转推任务列表](https://www.volcengine.com/docs/6469/1126896)接口获取。
  body.TaskID = "8fde6aa0281d9f6e1*******a6e242365"
  
  resp, err := service.StopPullToPushTask(context.Background(), body)

  if err != nil {
    fmt.Printf("error %v", err)
  } else {
    fmt.Printf("success %+v", resp)
  }
}

获取拉流转推任务列表

您可以调用 ListPullToPushTask 接口获取拉流转推任务列表。详细的参数说明可参见 ListPullToPushTask 接口文档。

接口调用示例如下所示。

package main

import (
    "os"
    "context"
    "fmt"

    "github.com/volcengine/volc-sdk-golang/base"
   	"github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func main () {
  // 强烈建议不要把 AccessKey ID 和 AccessKey Secret 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
  // 本示例通过从环境变量中读取 AccessKey ID 和 AccessKey Secret,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 ACCESS_KEY_ID 和 ACCESS KEY_SECRET
  service := live_v20230101.NewInstance()

  service.SetCredential(base.Credentials{
    AccessKeyID:     os.Getenv("ACCESS_KEY_ID"),
    SecretAccessKey: os.Getenv("ACCESS_KEY_SECRET"),
  })

  query := &live_v20230101.ListPullToPushTaskQuery{}
    
  //查询数据的页码,默认为 1,表示查询第一页的数据。
  var queryPage *int32 

  var queryPageValue int32 = 1 

  queryPage = &queryPageValue 

  query.Page = queryPage 
    
  //每页显示的数据条数,默认为 20,最大值为 500。
  var querySize *int32 

  var querySizeValue int32 = 20 

  querySize = &querySizeValue 

  query.Size = querySize 
    
  //拉流转推任务的名称,不区分大小写,支持模糊查询。
  // 例如,`title` 取值为 `doc` 时,则返回任务名称为 `docspace`、`docs`、`DOC` 等 title 中包含 `doc` 关键词的所有任务列表。
  var queryTitle *string 

  var queryTitleValue string = "doc" 

  queryTitle = &queryTitleValue 

  query.Title = queryTitle
  
  resp, err := service.ListPullToPushTask(context.Background(), query)

  if err != nil {
    fmt.Printf("error %v", err)
  } else {
    fmt.Printf("success %+v", resp)
  }
}