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

时间:2019-08-14 18:14:03

标签: youtube-iframe-api

当我使用Google的YTPlayer播放带有cc_load_policy=1的视频时,如果该视频仅带有英语(自动生成)字幕,则字幕仍不会出现我-在这种情况下,是否仍不显示英语(自动生成)

我尝试设置cc_lang_pref=enhl=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
    }
});

上面的示例代码包含存在此类问题的youtube videoid。 它应该已经显示了带有英语(自动生成的)字幕的视频,但是没有任何显示。我可以手动单击CC按钮来显示字幕,但我需要自动进行字幕。

1 个答案:

答案 0 :(得分:0)

没有任何官方或有记录的方法可以在嵌入式视频中强制使用自动生成的字幕。但是有一个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
    }
  })
}

工作jsFiddle is here

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

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