Кредит, где кредит должен.Я понял это благодаря этому репозиторию .
Итак, для того, чтобы Google мог произвести ожидаемые события, он должен быть информирован о состоянии метаданных видео.В частности, ему необходим доступ к тегу ID3 из видеопотока.
К сожалению, у него нет способа получить это с нативным HTMLVideoElement
.Вместо этого он должен быть информирован об информации.В случае jwplayer
и hls.js
это просто (примеры приведены ниже), но в случае videojs
это немного менее просто.Вам необходимо прослушать дорожку метаданных.
// I placed this right above player.src(t.getStreamData().url); above
// basically, you're looking at all of the tracks as they're added
player.textTracks().on('addtrack', function (e) {
// find out if the new track is metadata
var track = e.track;
if (track.kind === 'metadata') {
// a cuechange event fires when the player crosses over an ID3 tag
track.on('cuechange', function () {
let elemTrack = track.activeCues[0];
if (elemTrack && elemTrack.value.data) {
var metadata = {};
metadata[elemTrack.value.key] = elemTrack.value.data;
metadata["duration"] = Infinity;
streamManager.onTimedMetadata(metadata);
}
});
}
});
Если вы используете JWPlayer, это немного проще:
jwplayer().on('meta', function(e) {
if (streamManager && e.metadata) {
streamManager.onTimedMetadata(e.metadata);
}
});
И hls.js
также довольно прост
hls.on("hlsFragParsingMetadata",
function(event, data) {
if (streamManager && data) {
data.samples.forEach(function(sample) {
streamManager.processMetadata('ID3', sample.data, sample.pts);
});
}
}
);