You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YouTube Data API liveBroadcasts.list传ID列表返回空结果问题

问题描述

尝试获取非本人所属其他频道的直播流属性时,所有liveBroadcasts.listLiveBroadcasts接口调用均返回0条条目,无接口报错。

复现逻辑

  1. 调用search.list接口,传入查询参数maxResults=50、eventType=live、order=viewCount、q='DRONE|GAME'、type=video,成功返回最多50条活跃直播结果,抽样访问https://youtu.be/<VIDEO_ID>可确认抽检条目均为真实生效的活跃直播流。
  2. 提取搜索结果中所有videoId拼接为ID列表,传入liveBroadcasts.listLiveBroadcasts接口,指定broadcastType=all,请求part为snippet,contentDetails,status,statistics,接口正常响应无报错,但返回条目数始终为0。

核心疑问

  • liveBroadcasts.listLiveBroadcasts接口是否仅支持查询当前授权账号自身频道的直播?
  • 接口提供的mine、onBehalfOfContentOwner参数的设计用途是什么?
  • 是否存在可查询任意公开直播流属性的API接口?

复现代码

function getRandomLiveStream() {
    global $service ;

    // We'll search for up to 50 livestreams.. and check each one for a livechat.
    // We'll pass the first match as our desired livestream.

    $queryParms = [ 'maxResults' => 50
                  , 'eventType' => 'live'
                  , 'order' => 'viewCount'
                  , 'q' => 'DRONE|GAME'
                  , 'type' => 'video'
                        ] ;
    $searchResults = $service->search->listSearch('snippet', $queryParms) ;
    if ($searchResults && count($searchResults->items) > 0) {
        $ids = [ ] ;
        foreach ($searchResults->items as $item) { // Compile the list of up to 50 ids
            $ids[] = $item->id->videoId ;
            }
        $queryParms = [ 'maxResults' => count($ids)
                      , 'id' => implode(',', $ids)
                            ] ;
        $liveBroadcastItems = listLiveBroadcasts($queryParms) ;
        if ($liveBroadcastItems) {
            foreach ($liveBroadcastItems as $item) {
                if (($item->statistics->totalChatCount > 0) // Only if there is an active chat
                        && ($item->liveChatId) ) // We need a liveChat ID.  If we have that, return this item.
                    return $item ;
                }
            }
        }
    return false ; // Couldn't find a livestream with chat.
    }



function listLiveBroadcasts($queryParms) {
    global $googleIsHappy ;
    global $service ;
    global $lov ;

    try {
        $queryParms['broadcastType'] = 'all' ;

        $response = $service->liveBroadcasts->listLiveBroadcasts('snippet,contentDetails,status,statistics', $queryParms);
        return $response->items ;
        }
    catch (Exception $e) {
        $googleIsHappy = false ;
        $code = $e->getCode() ;
        $message = $e->getMessage() ;
        $json = $message ;
        if ($arr = json_decode($json, true)) {
            $message = $arr['error']['message'] ;
            }
        $string = sprintf("service->%s() failed with code %s, error: %s.\n"
                            , $serviceName, $code, $message) ;
        $lov->writeLogLine($string) ;
        return false ;
        }
    }
解答
  • liveBroadcasts.listLiveBroadcasts接口确实仅支持查询当前授权账号自身创建、管理的直播广播资源,属于接口权限层面的固定设计,不属于参数传错导致的异常。传入非当前账号有权管理的直播ID时,接口不会抛出权限类报错,会直接过滤所有无权限访问的条目,最终返回空列表,这是调用返回0条结果的根本原因。
  • 两个参数的实际用途如下:
    • mine:布尔类型参数,设置为true时,接口默认拉取当前授权账号所属频道下的所有直播广播,不需要额外传入频道ID或视频ID,仅能查询账号自有资源。
    • onBehalfOfContentOwner:面向YouTube官方认证的内容所有者(一般是MCN机构、版权管理方)的代理参数,传入已完成授权的内容所有者ID后,可以查询该内容所有者名下所有托管频道的直播广播,不需要给每个子频道单独做授权,本质还是用于管理自有/托管资源,不能用来查询无托管关系的公开频道内容。
  • 没有支持查询任意公开直播全量属性的公开API,公开维度的直播信息可通过现有接口组合获取:
    直播基础信息(标题、封面、发布时间)、公开统计数据(观看量、累计聊天数)、直播核心状态(实际开播时间、实时在线人数、直播聊天ID、直播是否结束),均可通过videos.list接口获取:传入目标公开视频ID,请求snippet,statistics,liveStreamingDetails分区即可拿到上述字段。
    直播推流配置、延迟等级、自动录制开关、变现配置这类广播管理级属性,仅对直播所属频道的管理账号开放,无公开查询渠道。

内容的提问来源于stack exchange,提问作者Dennis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:51:27