You need to enable JavaScript to run this app.
文档中心
视频直播

视频直播

复制全文
下载 pdf
回调管理
回调内容说明
复制全文
下载 pdf
回调内容说明

配置对应的回调地址后,当发生相关事件时,视频直播将以 POST 请求的方式,主动向业务服务器发送携带事件信息的 JSON 数据包。

网络协议

  • 请求方式:HTTP POST 请求。
  • 请求头:默认 Content-Type 为 application/json
  • 请求体:为结构化 JSON 格式,具体参数详见回调内容
  • 应答机制:业务服务器需返回状态码 200 OK。视频直播仅根据 HTTP 状态码判断业务服务器是否成功接收回调消息,不关心应答体的具体内容。

请求可靠性

为确保回调消息稳定送达,当回调请求失败时,视频直播具备如下重试机制:

  • 首次请求失败后,会立即进行最多 3 次间隔 3 秒的短期重试。
  • 若仍失败,进入队列继续重试,最长重试时间为 10 分钟,该时间从首次请求发起时开始计算,超时后不再重试。
  • 以下情况会被判定为请求失败:
    • 请求超时,即 4 秒内未收到应答。
    • HTTP 状态码非 200。

公共安全签名参数

推流开始、推流结束、录制、截图和截图审核结果回调消息包含签名参数 signt。在回调配置中指定回调密钥后,业务服务器可根据签名参数验证请求来源的合法性。

参数类型说明

sign

String

签名字符串。指定回调密钥后,业务服务器可按以下步骤计算签名,并与回调请求中的 sign 值比对:

  1. 按照 AuthKeyPrimary(回调密钥)、t(签名过期时间)的顺序拼接参数值。例如,回调密钥为 abc,签名过期时间为 1787800827,则拼接结果为 abc1787800827
  2. 将拼接结果进行 MD5 加密,生成 32 位小写字符串。

如果计算结果与回调请求中的 sign 值一致,则表示签名校验通过。

说明

未指定回调密钥时,取值为空字符串。

t

Long

签名过期时间,默认为回调请求发起时间的 10 分钟后。Unix 时间戳,单位为秒。

说明

  • 指定回调密钥后,业务服务器收到回调请求时,如果当前时间晚于 t 指定的时间,则可以判定该回调请求无效,防止网络重放攻击。
  • 未指定回调密钥时,取值固定为 0

回调内容

推流开始回调消息

当推流开始时,视频直播会向您设置的回调地址发送回调消息。有关如何设置回调地址,详见回调配置

参数类型说明
vhostString域名空间。
domainString推流域名。
appStringAppName
streamStringStreamName
event_typeString事件名,固定为 push_start,表示推流开始事件。
signString公共安全签名参数,用于验证请求来源的合法性。详见公共安全签名参数
tLong公共安全签名参数,表示请求的过期时间。详见公共安全签名参数
uniq_idString事件 ID,用于事件去重。
detailObject of detail详细信息。

detail

参数类型说明
priorityInteger推流优先级。取值越大,优先级越高。
timeInteger开始推流时间。Unix 时间戳,单位为秒。
time_msInteger开始推流时间。Unix 时间戳,单位为毫秒。

transcoded

Boolean

本次回调对应的流是否为转码流。取值如下:

  • true:转码流。
  • false:非转码流。

说明

如需对转码流触发回调,回调配置中必须开启转码流回调,详见回调配置

fp_node_ipString推流节点 IP 地址。
fp_client_ipString推流客户端 IP 地址。
fp_user_urlString推流请求携带的 URL 参数。
location_ipString已废弃。
location_portInteger已废弃。
push_protocolString推流协议。
session_idString本次推流的会话 ID。
sequence_idString本次推流的序列 ID,是一次推流的唯一标识。
stream_paramsString平台保留参数,无特殊需求可忽略。

示例

{
  "code": 0,
  "data": {
    "app": "live",
    "detail": {
      "fp_client_ip": "117.***.**.85",
      "fp_node_ip": "111.**.***.154",
      "fp_user_url": "",
      "location_ip": "10.***.***.45",
      "location_port": 1935,
      "priority": 0,
      "push_protocol": "rtmp",
      "sequence_id": "1824004938.n.cn-cn3130g1.54012_3287659",
      "session_id": "1045216675",
      "stream_params": "",
      "time": 1787665054,
      "time_ms": 1787665054820,
      "transcoded": false
    },
    "domain": "push.example.com",
    "event_type": "push_start",
    "sign":"xxxxx",
    "t":1787747992,
    "stream": "test",
    "uniq_id": "push.example.com:live:test_on_publish_start_1045216675",
    "vhost": "push.example.com"
  },
  "message": "ok"
}

推流结束回调消息

当推流结束时,视频直播会向您设置的回调地址发送回调消息。有关如何设置回调地址,详见回调配置

参数类型说明
vhostString域名空间。
domainString推流域名。
appStringAppName
streamStringStreamName
event_typeString事件名,固定为 push_end,表示推流结束事件。
signString公共安全签名参数,用于验证请求来源的合法性。详见公共安全签名参数
tLong公共安全签名参数,表示请求的过期时间。详见公共安全签名参数
uniq_idString事件 ID,用于事件去重。
detailObject of detail详细信息。

detail

参数类型说明
timeInteger结束推流时间。Unix 时间戳,单位为秒。
time_msInteger结束推流时间。Unix 时间戳,单位为毫秒。
priorityInteger推流优先级。取值越大,优先级越高。
errmsgString推流结束原因。详见断流原因
err_msg_v2String推流结束原因。
errcodeInteger推流结束码。
fp_node_ipString推流节点 IP 地址。
fp_client_ipString推流客户端 IP 地址。
fp_user_urlString推流请求携带的 URL 参数。
location_ipString已废弃。
location_portInteger已废弃。

push_duration

Integer

推流时长,单位为毫秒。该参数会在实际推流时长基础上额外计算 10 分钟的时长。例如实际推流 2 分钟,则该参数取值为 720000(即 720 秒,12 分钟)。

说明

视频直播仅会按实际推流时长计费。

push_protocolString推流协议。
session_idString本次推流的会话 ID。
sequence_idString本次推流的序列 ID,是一次推流的唯一标识。
stream_paramsString平台保留参数,无特殊需求可忽略。

transcoded

Boolean

本次回调对应的流是否为转码流。取值如下:

  • true:转码流。
  • false:非转码流。

说明

如需对转码流触发回调,回调配置中必须开启转码流回调,详见回调配置

示例

{
    "code":0,
    "message":"ok",
    "data":{
        "vhost":"push.example.com",
        "domain":"push.example.com",
        "app":"live",
        "stream":"test",
        "event_type":"push_end",
        "sign":"xxxxxx",
        "t":1787747992,
        "uniq_id":"push.example.com:live:test_on_publish_stop_1234567890",
        "detail":{
            "time":1640849502,
            "time_ms":1640849502762,
            "location_ip":"10.**.**.1",
            "location_port":1935,
            "transcoded":false,
            "priority":0,
            "errmsg":"func:OnStop:eof",
            "fp_node_ip":"10.**.**.1",
            "fp_client_ip":"10.**.**.2",
            "fp_user_url":"",
            "session_id":"3693930911_150.139.1.1",
            "stream_params":"",
            "sequence_id":"027-20241313130E.1231423483",            
            "push_duration":720000,
            "errcode":0,
            "err_msg_v2":"The reason for the streaming disconnection is unknown",
            "push_protocol":"rtmp"
        }
    }
}

录制回调消息

当存储直播录制文件时,视频直播会向您设置的回调地址发送回调消息。有关如何设置回调地址,详见回调配置

注意

如需存储录制文件至 TOS(对象存储),请先联系技术支持开启该功能。

参数类型说明
account_idString账号 ID。
vhostString域名空间。
domainString推流域名。
appStringAppName
streamStringStreamName
event_typeString事件名,固定为 record_event,表示录制事件。
signString公共安全签名参数,用于验证请求来源的合法性。详见公共安全签名参数
tLong公共安全签名参数,表示请求的过期时间。详见公共安全签名参数
detailObject of detail详细信息。

detail

参数类型说明

tos_bucket

String

录制文件保存在 TOS 中的 bucket 名称。

说明

仅当存储录制文件到 TOS 时有值。

tos_object

String

录制文件路径。

  • 录制文件存储在 TOS 时,取值为录制文件在 TOS 中的完整路径。
  • 录制文件存储在 VOD 时,取值与 vod_filename 相同。

uri

String

录制文件在 VOD(点播)中的 vid

说明

仅当存储录制文件到 VOD 时有值。

durationInteger录制长度,单位为毫秒。
duration_msInteger已废弃。
start_timeInteger录制开始时间。Unix 时间戳,单位为秒。
start_time_msInteger已废弃。
stop_timeInteger录制结束时间。Unix 时间戳,单位为秒。

format

String

录制格式。取值如下:

  • mp4
  • m3u8
  • flv

url

String

存储在 TOS 的录制文件地址。

说明

仅当存储录制文件到 TOS 时有值。您可通过 uri 或者 vod_filename 从 VOD 获取播放地址。

data_sourceString已废弃。
account_idString账号 ID。
task_idString录制任务 ID。
sizeLong录制文件的大小,单位为字节。
widthInteger录制文件的宽度,单位为 px。
heightInteger录制文件的高度,单位为 px。
extraString已废弃。
s3_endpointString已废弃。
codecString已废弃。

vod_filename

String

录制文件在 VOD 中的路径。

说明

仅当存储录制文件到 VOD 时有值。

示例

  • 录制文件存储在 VOD
    {
        "code":0,
        "message":"ok",
        "data":{
            "account_id":"10000**",
            "vhost":"push.example.com",
            "domain":"push.example.com",
            "app":"live",
            "stream":"test",
            "event_type":"record_event",
             "sign":"xxxx",
             "t":1787747992,
            "detail":{
                "tos_bucket":"",
                "tos_object":"record/push.example.com/live/test_1640847072_1640849947_record.m3u8",
                "uri":"v0df17g10000ca6ut9pka0prk****pig",
                "duration":2868674,
                "duration_ms":2868674,
                "start_time":1640847072,
                "start_time_ms":0,
                "stop_time":1640849947,
                "format":"m3u8",
                "url":"",
                "data_source":"",
                "account_id":"10000**",
                "task_id":"1234",  
                "size":28361,
                "width":1280,
                "height":720,
                "extra":"{}",
                "s3_endpoint":"",
                "codec":"",                     
                "vod_filename":"record/push.example.com/live/test_1640847072_1640849947_record.m3u8"
            }
        }
    }
    
  • 录制文件存储在 TOS
    {
        "code": 0,
        "message": "ok",
        "data": {
            "account_id":"10000**",    
            "vhost": "push.example.com",
            "domain": "push.example.com",
            "app": "live",
            "stream": "test",
            "event_type": "record_event",
            "sign":"xxxx",
            "t":1787747992,
            "detail": {
                "tos_bucket": "livetest",
                "tos_object": "record/record/push.example.com/live/test/1653469134_1653469220.m3u8",
                "uri": "",
                "duration": 84430,
                "duration_ms":84430,            
                "start_time": 1653469134,
                "start_time_ms":0,            
                "stop_time": 1653469220,
                "format": "m3u8",
                "url": "http://livetest.tos.volces.com/record/record/push.example.com/live/test/1653469134_1653469220.m3u8",
                "data_source":"",
                "account_id":"10000**",
                "task_id":"1234",             
                "size": 689,
                "width":1280,
                "height":720,
                "extra":"{}",
                "s3_endpoint":"",
                "codec":"",
                "vod_filename":""                     
            }
        }
    }
    
    

截图回调消息

当存储直播截图时,视频直播会向您设置的回调地址发送回调消息。有关如何设置回调地址,详见回调配置

注意

如需存储直播截图至 TOS(对象存储),请先联系技术支持开启该功能。

参数类型说明
VhostString域名空间。
DomainString推流域名。
AppStringAppName
StreamStringStreamName
StreamURLString已废弃。

Bucket

String

截图保存在 TOS 中的 bucket 名称。

说明

仅当存储截图到 TOS 时返回该参数。

ObjectKeyString截图的存储路径。
HeightInteger图片高度,单位为 px。
WidthInteger图片宽度,单位为 px。

Format

String

图片格式。取值如下:

  • jpg
  • jpeg
TimeStampInteger截图时间。Unix 时间戳,单位为秒。
AccountIdString账号 ID。

ImageXURI

String

截图存储在 veImageX 时,veImageX 为图片分配的资源 URI。

说明

仅当存储截图到 veImageX 时返回该参数。

ServiceID

String

截图存储在 veImageX 时,veImageX 的服务 ID。

说明

仅当存储截图到 veImageX 时返回该参数。

event_typeString事件名,固定为 snapshot_event,表示截图事件。
signString公共安全签名参数,用于验证请求来源的合法性。详见公共安全签名参数
tLong公共安全签名参数,表示请求的过期时间。详见公共安全签名参数

示例

  • 截图存储在 veImageX
    {
        "Vhost": "push.example.com",
        "Domain": "push.example.com",
        "App": "live",
        "Stream": "test",
        "StreamURL":"",
        "ObjectKey": "push.example.com/live/test/2022052510115****.jpg",
        "Height": 1080,
        "Width": 1920,
        "Format": "jpg",
        "TimeStamp": 1653473517,
        "AccountId": "2000****74",
        "event_type":"snapshot_event",
        "ImageXURI": "tos-cn-i-exampleid/2022052510115****.jpg",
         "sign":"xxxx",
         "t":1787747992,
        "ServiceID": "exampleid" 
    }
    
  • 截图存储在 TOS
    {
        "Vhost":"push.example.com",
        "Domain":"push.example.com",
        "App":"live",
        "Stream":"test",
        "StreamURL":"",
        "Bucket":"bucket1",
        "ObjectKey":"push.example.com/live/test/20211****.jpeg",
        "Height":864,
        "Width":480,
        "Format":"jpeg",
        "TimeStamp":1640849845,
        "AccountId": "2000****74",
        "event_type":"snapshot_event",
        "sign":"xxxx",
         "t":1787747992 
    }
    

拉流转推回调消息

当拉流转推任务开始、结束、开始转推直播或点播、发生告警或断流时,视频直播会向您设置的回调地址发送回调消息。有关如何设置回调地址,详见拉流转推

参数类型说明

action

String

触发本次回调的事件类型。

  • init:任务开始。
  • done:任务结束。
  • live_start:直播开始。
  • vod_start:点播开始。
  • alarm:任务告警。
  • stop:断流。

description

String

简要描述导致断流或告警的原因。

说明

仅当 action 取值为 alarmstop 时返回该参数。

event_timeInteger触发本次回调的时间。Unix 时间戳,单位为纳秒。
task_idString拉流转推任务 ID。
dstString推流地址。

type

Integer

视频来源类型。取值如下:

  • 0:直播。
  • 1:点播。

cycle_mode

Integer

点播文件的循环方式。取值如下:

  • -1:点播文件会无限循环播放。
  • 0:点播文件会循环播放指定次数。

说明

仅当视频来源为点播(type 取值为 1)时该参数有效。

event_typeString事件名,固定为 live_pull_to_push,表示拉流转推事件。

src

String

视频来源的地址。

  • 当视频来源为直播(type 取值为 0)时,表示直播的拉流地址。
  • 当视频来源为点播(type 取值为 1)时,表示当前点播素材的播放地址。

play_progress

Float

当前点播素材的播放时长。单位为秒,保留 2 位小数。

说明

仅当视频来源为点播(type 取值为 1)且播放时长大于 0 时返回该参数。

msgObject of CallbackMsg详细信息。

CallbackMsg

参数类型说明

type

String

回调消息类型。

  • PullFileUnstable:拉流转推任务的源流拉取不稳定。仅当 action 取值为 alarm 时,会返回该取值
  • PushStreamUnstable:拉流转推任务的推流不稳定。仅当 action 取值为 alarm 时,会返回该取值
  • PullFileFailed:拉流转推任务因源流拉取失败而断流退出。仅当 action 取值为 stop 时,会返回该取值
  • PushStreamFailed:拉流转推任务因推流失败而断流退出。仅当 action 取值为 stop 时,会返回该取值
  • FileEndEarly:拉流转推任务在到达任务结束时间之前提前结束,可能原因是点播文件播放次数达到限制等。仅当 action 取值为 stop 时,会返回该取值
errorString错误类型。仅当回调消息包含异常信息时返回。
messageString错误详情。仅当回调消息包含异常信息时返回。

示例

{
    "action":"stop",
    "description": "src_addr_invalid",
    "event_time":1650263223542095385,
    "task_id":"5f4c37605b7d711b51e28d73fa60****",
    "dst":"rtmp://push.example.com/live/teststream",
    "type":1,
    "cycle_mode":-1,
    "event_type": "live_pull_to_push",
    "src":"http://pull.example.com/live/test.m3u8",
    "play_progress":10.00,
    "msg": {
      "type": "PullFileFailed",
      "error": "HTTP_NOT_FOUND",
      "message": "Server returned 404 Not Found"
    }
}

截图审核结果回调消息

当存储直播审核截图时,视频直播会向您设置的回调地址发送回调消息。有关如何设置回调地址,详见回调配置

参数类型说明
VhostString域名空间。
DomainString推流域名。
AppStringAppName
StreamStringStreamName
EventTypeString事件名,固定为 scan_screenshoot_event,表示截图审核事件。
signString公共安全签名参数,用于验证请求来源的合法性。详见公共安全签名参数
tLong公共安全签名参数,表示请求的过期时间。详见公共安全签名参数
EventDataObject of EventData详细信息。
EventTimeString触发本次回调的时间。RFC3339 格式的时间字符串,精度为秒。
EventIdString事件 ID,用于事件去重。
CallbackURLArray of String已废弃。

EventData

参数类型说明
MediaTypeInteger可能违规的内容类型。截图审核的默认取值为 1,表示直播截图。
ImageString审核截图在 veImageX 的存储路径。

HitLabels

Array of String

截图的违规原因。取值如下:

  • 301:涉黄。
  • 302:涉敏 1。
  • 303:涉敏 2。
  • 304:广告。
  • 305:引人不适。
  • 306:违禁。
  • 307:二维码。
  • 308:诈骗。
  • 309:不良画面。
  • 310:未成年相关。
  • 320:文字违规。
RiskHitArray of Risk命中的违规列表。
RiskALLArray of Risk已配置的所有模型列表。

Decision

String

根据违规命中情况,给出的操作建议。取值如下:

  • PASS:审核通过。
  • REVIEW:需要人工复审。
  • BLOCK:不通过,建议召回。
AIResultOriginString审核平台返回的响应原数据。

Risk

参数类型说明

Label

String

截图命中的违规类型标签。取值如下:

  • 301:涉黄。
  • 302:涉敏 1。
  • 303:涉敏 2。
  • 304:广告。
  • 305:引人不适。
  • 306:违禁。
  • 307:二维码。
  • 308:诈骗。
  • 309:不良画面。
  • 310:未成年相关。
  • 320:文字违规。
SubLabelString截图命中的违规子类型标签。

Decision

String

根据违规命中情况,给出的操作建议。取值如下:

  • PASS:审核通过。
  • REVIEW:需要人工复审。
  • BLOCK:不通过,建议召回。

示例

{
    "Vhost": "push.example.com",
    "Domain": "push.example.com",
    "App": "live",
    "Stream": "test",
    "EventType": "scan_screenshoot_event",
    "sign": "xxxx",
     "t": 1659080320,
    "EventData": {
        "MediaType": 1,
        "Image":"tos-mya-i-asd****dcy/1787889583110.jpg",        
        "HitLabels": [
            "301"
        ],
        "RiskHit": [
            {
                "Label": "301",
                "SubLabel": "301001",
                "Decision": "BLOCK"
            },
            {
                "Label": "301",
                "SubLabel": "301002",
                "Decision": "BLOCK"
            }
        ],
        "RiskALL": [
            {
                "Label": "301",
                "SubLabel": "301001",
                "Decision": "BLOCK"
            },
            {
                "Label": "301",
                "SubLabel": "301002",
                "Decision": "BLOCK"
            }
        ],
        "Decision": "BLOCK",
        "AIResultOrigin": "{\"RequestId\":\"202207291528410102091561590F291DAA\",\"Code\":0,\"Message\":\"success\",\"Data\":{\"DataId\":\"7125691570795811116\",\"Decision\":\"BLOCK\",\"Results\":[{\"Label\":\"301\",\"SubLabel\":\"301001\",\"Decision\":\"BLOCK\",\"score\":0,\"Detail\":null,\"Frames\":null},{\"Label\":\"301\",\"SubLabel\":\"301002\",\"Decision\":\"BLOCK\",\"score\":0,\"Detail\":null,\"Frames\":null}],\"Scores\":null}}"
    },
    "EventTime": "2022-07-29T15:28:40+08:00",
    "EventId": "71256915707958766**",
    "CallbackURL": [""]
}

拉流录制任务状态回调消息

参数类型说明
vhostString域名空间。名称。
appString应用名称。
streamString流名称。
event_typeString事件名,固定值为 record_ts,表示拉流录制任务状态回调。

record_status

String

事件名。

  • record_started:录制已经成功开始。
  • record_stop:录制中断、断流。
task_idString任务 ID。
tos_bucketObject保存在对象存储中时的详细信息,见下表。
vod_namespaceObject保存到视频点播中时的详细信息,见下表。
service_idString截图存储在 veImageX 时,veImageX 的服务 ID。
timeInt回调时间,单位为秒。
time_msInt回调时间,单位为毫秒。

msg

String

录制状态回调消息,当 RecordStatusrecord_stop 时,回调消息:

  • 直播断流。
  • 回源断流。

tos_bucket

参数类型说明
flvStringFLV 录制的 bucket ,设置为空时不展示。
hlsStringHLS 录制的 bucket ,设置为空时不展示。
mp4StringMP4 录制的 bucket ,设置为空时不展示。

vod_namespace

字段类型说明
flvStringFLV 录制的 namespace ,设置为空时不展示。
hlsStringHLS 录制的 namespace ,设置为空时不展示。
mp4StringMP4 录制的 namespace ,设置为空时不展示。

示例

  • 录制文件存储在 VOD
    {
        "code":0,
        "message":"ok",
        "data":{
            "vhost":"live.example.push.com",
            "app":"live",
            "stream":"livestream001",
            "event_type":"record_ts",
            "detail":{
                "record_status":"record_stop",
                "task_id":"f831f3b0********1aa4dcf7621",
                "tos_bucket":{
                    // 对象存储信息为空
                },
                "vod_namespace":{
                    "hls":"live**tt"
                },
                "time":1688717870,
                "time_ms":1688717870948,
                "msg":"CreateRelaySourceError"
            }
        }
    }
    
  • 录制文件存储在 TOS
    {
        "code":0,
        "message":"ok",
        "data":{
            "vhost":"push.example.com",
            "app":"live",
            "stream":"livestream001",
            "event_type":"record_ts",
            "detail":{
                "record_status":"record_started",
                "task_id":"f831f3b0********1aa4dcf7621",
                "tos_bucket":{
                    "hls":"live-****-test1"
                },
                "vod_namespace":{
                    // 点播空间内容为空
                },
                "time":1688717767,
                "time_ms":1688717767506,
                "msg":""
            }
        }
    }
    

断流原因

常见的断流原因如下所示。如您获取的断流原因不在下表或您无法判断处理方法,请创建工单联系技术支持进行处理。

errmsg说明
func:HandleInputPacket:net:func:Input:rtmp:FLV Signature don't matchFLV 协议解析失败导致推流断开。
func:HandleInputPacket:net:func:Input:rtmp:close stream id 0 don't match 1RTMP 协议不兼容导致推流断开。
func:conn.Read:net:local error: tls: bad record MACTLS 协议失败导致推流断开。
func:timeout:idle_too_long推流端长时间没有数据传输导致超时断开。
io:conn_reset_by_peer推流端非通过正常停止直播操作导致的推流断开,如网络中断、直接关闭推流软件等。
func:conn.Read:net:read_i/o_timeout视频直播中心数据 I/O 错误导致的推流断开。
param:Priority:priority被高优先级流推流导致的低优先级流推流断开。
auth:JudgePublishAuth:timeout:invalid_signURL 鉴权参数字段无效、鉴权超时等原因导致推流断开。
func:OnStatus:func:RtmpStatusCode2NssError:not_allowed直播流被禁用导致的推流断开。
func:OnStatus:func:RtmpStatusCode2NssError:api_close调用 KillStream 接口断开直播。
func:sendEvent:param:receiver:not_running视频直播中心内部错误,请联系技术支持。
auth:remote_auth:not_allowed远程鉴权失败导致推流断开。
func:conn.Read:eof复杂原因导致的推流断开,请联系技术支持。
func:OnStop:eof推流端通过停止直播功能正常结束推流。
func:conn.Read:net:The socket was properly connected, but the connection has been broken网络异常导致推流断开。
func:OnStatus:func:RtmpStatusCode2NssError:duplicate使用相同流名称,进行推流导致推流断开。
最近更新时间:2026.09.02 14:52:01
这个页面对您有帮助吗?
有用
有用
无用
无用