cc_load_policy=1 不适用于仅具有自动生成字幕的视频

Sac*_*one 6 youtube-iframe-api

当我使用 google 的 YTPlayer 显示带有 的视频时cc_load_policy=1,如果相关视频只有英文(自动生成)字幕,我仍然看不到字幕 - 难道英文(自动生成)字幕不应该出现吗?在这种情况下显示?

我尝试过设置cc_lang_pref=en以及hl=en参数但无济于事。

cc_load_policy=1参数确实适用于有英文字幕的视频,因此我认为该问题与代码本身没有任何关系。

我是否应该使用特殊的英语语言代码(自动生成) ?

new YT.Player("ytplayer_placeholder", {
    width: "100%",
    videoId: "4Uzbpj1UCEY",
    playerVars: {cc_load_policy: 1},
    events: {
        'onReady': player_ready,
        'onStateChange': schedule_buffering,
        'onError': error_handler
    }
});
Run Code Online (Sandbox Code Playgroud)

上面的示例代码包括存在此类问题的youtube videoid。它应该显示带有英文(自动生成)字幕的视频,但什么也没有出现。我可以手动单击 CC 按钮来显示字幕,但我需要自动发生。

小智 5

没有官方或有记录的方法可以强制在嵌入视频中自动生成字幕。然而,有一个使用 setOption 方法的解决方案现在可以工作,但不能保证它将来也能工作,因为这是该方法的无记录调用:

const onApiChange = _ => {   
  if (typeof player.setOption === 'function') {
    player.setOption('captions', 'track', {languageCode: 'en'}) // undocumented call
  }  
}

function onYouTubePlayerAPIReady() {
  player = new YT.Player('player', {
    height: '360',
    width: '640',
    videoId: '4Uzbpj1UCEY',
    playerVars: {
      cc_load_policy: 1
    },
    events: {
      onApiChange
    }
  })
}

Run Code Online (Sandbox Code Playgroud)

工作jsFiddle 在这里

在使用 setOption 函数之前,您必须等待 onApiChange 事件。(请参阅: https: //developers.google.com/youtube/iframe_api_reference#Events)根据文档,仅支持“fontSize”和“reload”参数。然而,更改字幕轨道也有效,并且它会打开字幕作为副作用。我只尝试了“en”语言代码,当然,如果有可用的英语字幕轨道,这将更改为正常的英语字幕轨道,但在没有预定义轨道的情况下将显示自动生成的英语字幕。

(您还可以使用 getOption 方法查询活动字幕轨道,但如果使用自动生成的字幕,它将不会返回任何内容。)