调用YouTube API Videos端点时liveBroadcastContent字段异常,求可靠直播识别方法
我完全懂你遇到的这个头疼问题——刚启动的直播,明明已经开播几分钟了,调用Videos.list端点时liveBroadcastContent却一直返回"none",直接搞崩了原本依赖这个字段判断直播状态的逻辑。这种情况大概率是API的状态同步延迟或者缓存机制导致的,毕竟Videos端点主要面向普通视频,直播状态的更新优先级和时效性确实不如专门的直播相关端点。
这里给你几个更可靠的方案,用来准确判断视频是否为正在进行的直播:
1. 直接使用LiveBroadcasts.list端点
这是最精准的方式,因为这个端点就是专门为直播状态查询设计的。如果手里有直播的broadcast ID,直接传入即可;如果只有视频ID,也可以先通过Videos.list的contentDetails.liveBroadcastId字段,关联到对应的broadcast ID。请求时记得指定part=snippet,status,然后查看status.lifeCycleStatus字段:
- 当值为
live时,说明直播正在进行 - 值为
upcoming表示直播尚未开始 - 值为
completed表示直播已结束
示例请求参数(GET方式):
part=snippet,status&id=YOUR_BROADCAST_ID
2. 结合Videos.list和LiveBroadcasts.list做双重验证
如果你的场景只能先拿到视频ID,可以先调用Videos.list,检查contentDetails.liveBroadcastId是否存在——只要这个字段存在,就说明该视频关联了直播流,接着用这个ID去调用LiveBroadcasts.list获取实时状态。这种方式完全绕开了liveBroadcastContent的延迟问题,准确性拉满。
3. 关注Videos.list的辅助字段
有时候哪怕liveBroadcastContent显示"none",contentDetails里的liveBroadcastId依然会存在,这本身就能作为该视频属于直播流的标志。再配合LiveBroadcasts的状态查询,就能准确判断当前是否在直播。
另外要提一句,直播刚启动时,哪怕是LiveBroadcasts端点也可能有几秒钟的延迟,但相比Videos端点会快很多,基本能满足实时判断的需求。
内容的提问来源于stack exchange,提问作者Kiterosma

