欢迎光临
我们一直在努力

5 分钟拿到你的监控设备直播地址:HLS、FLV 与低延迟播放怎么选(实战对比)

5 分钟拿到你的监控设备直播地址:HLS、FLV 与低延迟播放怎么选(实战对比)


接入乐橙设备的第二周,前端同学 @ 我:「接口都 200 了,播放器还在转圈。」查日志才发现,后端把 HLS 地址当 FLV 喂给了 flv.js——协议错了,签名再对也没用。那天我们定下规矩:先选播放协议,再调 OpenAPI;很多「拿不到直播」的问题,其实是路走错了。


为什么「拿直播地址」值得单独写一篇

设备绑定、listDeviceDetailsByPage 同步资产——只是让系统知道「有哪路通道」。真正面向用户播放,还要再跨一步:按协议签发可播放 URL。乐橙开放平台在「设备直播」模块里提供了多条现行路径(均属当前维护的 OpenAPI,不要去抄「旧版本协议」栏目里的过期接口):

诉求典型场景平台侧常见路径
Web/H5 快速出画 监控大屏、轻量预览 HLS(bindDeviceLive / getLiveStreamInfo)
低延迟 Web、小程序 互动、多路墙 FLV(createDeviceFlvLive)
对讲、小程序推流 考管喊话、小程序 live-pusher RTMP(createDeviceRtmpLive,常与 FLV 组合)
亚秒级、端上预览 App、私有化集成 OpenSDK / 私有协议(非本文 HTTP 一键 URL)

社区里常把 WebRTC 和上面几种混为一谈。需要先说清边界:现行 OpenAPI 直接返回的是 HLS、FLV、RTMP 等地址;若你要浏览器里 WebRTC 级别的延迟,通常要走 SDK 拉私有流,或在自建网关把 RTSP/FLV 再转 WebRTC——这是架构选型,不是某一个 bindXxx 多传一个参数的事。

三条 HTTP 路线的关系(一张表记住)

┌─ bindDeviceLive ──▶ 单路 HLS(指定主/辅码流)
accessToken ───────┼─ getLiveStreamInfo ▶ 该通道已创建直播的全量 HLS(主/辅、http/https)
├─ createDeviceFlvLive ▶ flv / flvHD(实时或录像回放)
└─ createDeviceRtmpLive ▶ rtmp / rtmpHD(小程序、对讲推流)

官方说明:bindDeviceLive 创建设备源直播时,后台会默认准备主码流、辅码流、HTTP/HTTPS 等多套地址,该接口响应里只带回当前所选码流的 HLS;要看全量,再调 getLiveStreamInfo。

开发总览里对各集成方式的延迟有量级对比(云直播 HLS 往往 3~8 秒;轻应用、私有协议更低)。选型时别只比「哪个接口少写两行代码」,要比 延迟、并发、终端兼容性。

我们的原则

  • 密钥与签名只在服务端——客户端只拿短时播放 URL 或自家会话 token。
  • 地址不当长期资产——泄露即裸播;跟业务会话绑定,结束即废引用。
  • 先 bindDeviceLive 再查——未创建直播就调 getLiveStreamInfo,容易空数据(踩坑见下)。

  • 0. 前置:令牌 + 设备在线(1 分钟)

    播放前确认:listDeviceDetailsByPage 里目标 deviceId 的 deviceStatus 为 online,通道 channelStatus 为 online。令牌用缓存好的管理员 accessToken,别每个观众请求都刷新。

    方式一 · HLS:5 分钟出第一帧(最常用)

    Step 1 — 创建直播

    const live = await platformCall('bindDeviceLive', {
    token,
    deviceId: 'TESTQWERXXXX',
    channelId: '0',
    streamId: 1, // 0 高清主码流,1 标清辅码流
    liveMode: 'proxy',
    });
    const hls = live.streams?.[0]?.hls;

    成功标志:result.code === '0',streams[0].hls 为非空 m3u8 地址。

    Step 2 — 需要主/辅、HTTP/HTTPS 全量时

    const info = await platformCall('getLiveStreamInfo', {
    token,
    deviceId: 'TESTQWERXXXX',
    channelId: '0',
    });
    // info.streams[]:多条 hls、streamId、status、liveToken、coverUrl

    status 字段可用来排障(文档定义:0/1 直播中,2 视频源异常,3 码流转换异常等)——我们曾遇到「有 URL 但黑屏」,查到这里是 3,转去查设备侧码流。

    Step 3 — 前端

    HLS 用 hls.js(非 Safari)或原生 video(Safari)。不要把 m3u8 当 flv 播。

    维度HLS
    延迟 相对较高,适合监看、录播预览
    兼容 Web 最省心,CDN 友好
    接口 bindDeviceLive + 可选 getLiveStreamInfo
    踩坑 未先 create;HTTPS 页面拉 HTTP 流被浏览器拦截

    方式二 · FLV:要低延迟 Web 时的首选 OpenAPI

    const flv = await platformCall('createDeviceFlvLive', {
    token,
    deviceId: 'TESTQWERXXXX',
    channelId: '0',
    type: 'realTime', // realTime 实时;playback 录像回放
    });
    // flv.flv 标清,flv.flvHD 高清

    回放直播(同一接口,参数不同):

    await platformCall('createDeviceFlvLive', {
    token,
    deviceId, channelId,
    type: 'playback',
    beginTime: '2026-05-01 10:00:00',
    endTime: '2026-05-01 11:00:00',
    recordType: 'cloudRecord', // 或 localRecord
    speed: 2,
    });

    维度FLV
    延迟 通常优于 HLS,适合多路墙、互动
    兼容 浏览器需 flv.js 等;小程序文档也提到 FLV + live-player
    接口 createDeviceFlvLive
    踩坑 地址带 expire/digest,过期要重新签发

    我们监考墙从 HLS 改 FLV 后,首帧时间明显缩短,但 CPU(软解)上升,弱终端要限路数。

    方式三 · 「WebRTC」预期:OpenAPI 不直接给 SDP 时怎么办

    这是被问最多的问题。诚实结论:

    OpenAPI 直出:HLS / FLV / RTMP
    WebRTC 级体验:OpenSDK 实时预览(私有协议,延迟更低)
    浏览器 WebRTC:自建 media server 转码,或官方轻应用/播放器组件

    若产品 PRD 写「必须 WebRTC」,工程上通常是:

  • App / 桌面:集成 OpenSDK 实时预览(标准化 Demo 里有预览、对讲示例),不走 m3u8。
  • Web 要强互动:createDeviceFlvLive + flv.js 先满足;仍不够再评估网关转 WebRTC(成本自担)。
  • 小程序:文档路径是 FLV 拉流 + RTMP 推流对讲(createDeviceRtmpLive,对讲时 isTalk: true),不是标准 WebRTC 信令那套。
  • 对比表(选型用,非benchmark):

    协议/路径获取方式典型延迟感Web 浏览器备注
    HLS bindDeviceLive / getLiveStreamInfo 较高 ★★★★★ 最先跑通
    FLV createDeviceFlvLive 中低 ★★★★(需 flv.js) 多路墙常用
    RTMP createDeviceRtmpLive ★★(flash 已死,多给小程序/推流) 对讲推流
    SDK 私有流 OpenSDK 需封装 非 HTTP 一键 URL
    WebRTC 自建或组件 最低 视方案 非 OpenAPI 直接返回

    5 分钟实操清单(复制到 Wiki)

    □ 应用 appId/appSecret 已配置在后端
    □ accessToken 有效
    □ 设备、通道在线(分页列表可查)
    □ bindDeviceLive(streamId=1) → 得到 hls
    □ 浏览器或 hls.js 能播
    □ 若要 FLV:createDeviceFlvLive(type=realTime) → flv.js 能播
    □ 若要全量 HLS:getLiveStreamInfo 核对 status=0/1
    □ 播放地址不入库长期明文;会话结束丢弃

    踩坑实录

    现象原因处理
    getLiveStreamInfo 空 未先 bindDeviceLive 先创建再查
    有 hls 黑屏 status=3 码流转换异常 换 streamId、查设备在线与带宽
    HTTPS 页无法播 混合内容 用 https 的 hls(getLiveStreamInfo 里常有)
    flv 403 地址过期 重新 createDeviceFlvLive
    并发卡顿 同账号多路超限 辅码流 + 限路 + 轮巡
    抄旧文档调不通 旧版协议接口 改用设备直播模块现行 API

    后端统一封装(一种协议一个方法)

    async function issuePlayUrl({ protocol, deviceId, channelId, hd }) {
    const token = await getAdminToken();
    if (protocol === 'hls') {
    const d = await platformCall('bindDeviceLive', {
    token, deviceId, channelId: String(channelId),
    streamId: hd ? 0 : 1, liveMode: 'proxy',
    });
    return { type: 'hls', url: d.streams[0].hls, liveToken: d.liveToken };
    }
    if (protocol === 'flv') {
    const d = await platformCall('createDeviceFlvLive', {
    token, deviceId, channelId: String(channelId), type: 'realTime',
    });
    return { type: 'flv', url: hd ? d.flvHD : d.flv };
    }
    throw new Error('webrtc 请走 SDK 或自建网关');
    }


    安全

    文档强调:直播地址泄露可被直接观看。我们做法:播放 URL 只出现在短时 API 响应;审计「谁何时打开了哪路」;禁止把 m3u8/flv 写进静态配置。

    性能与并发

    • 多路场景优先 辅码流(streamId: 1 或 flv 标清)。
    • 账号级 播放并发 与 带宽 有额度,大促/统考前与运营核对。
    • getLiveStreamInfo 适合「详情页拉全量」,不适合「每秒轮询」。
    • 设备解绑会 自动删除 直播地址,换机要重新 bind。

    与云直播、轻应用的关系

    平台还有 云直播、轻应用组件、JS 播放组件 等更低代码路径——适合 PoC。自研后端仍建议掌握 bindDeviceLive / createDeviceFlvLive 这条 HTTP 链路,便于和自有权限、计费、会话系统耦合。


    小结

    「5 分钟拿到直播地址」在官方平台,现实路径是:令牌 → 确认通道在线 → bindDeviceLive 出 HLS;要低延迟 Web 加 createDeviceFlvLive;要全量 HLS 用 getLiveStreamInfo。WebRTC 则要在 OpenAPI 之外另选 SDK 或自建转码——不是接口名写错,而是协议栈本来不同。

    官方开放平台以视频技术与安全为核心,提供低代码组件与 OpenAPI,帮助开发者较低成本落地监控、直播、巡检等视频场景。若你刚绑定第一台设备,建议按本文清单先播通一路 HLS,再在同一后端封装 FLV,最后按产品延迟要求决定是否上 SDK 或网关。

    注册与接口说明:在 开放平台完成开发者注册并创建应用,于控制台获取密钥;在平台 在线开发文档 中搜索「设备直播说明」「创建设备源直播地址」「创建设备 flv 直播地址」「查询直播信息」等章节核对参数。以上为实践笔记,生产以最新文档为准。


    赞(0)
    未经允许不得转载:171主机测评 » 5 分钟拿到你的监控设备直播地址:HLS、FLV 与低延迟播放怎么选(实战对比)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址