最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - What is the proper way to read the video elementsattributes in video.js? - Stack Overflow

programmeradmin1浏览0评论

I needed to read and then modify some of the tags and attributes in the video element, which uses video.js as its player. I have been able to read the information using getElementsByTagName and getAttribute, as shown in the code below. But I was hoping there was an easier/better/best way to do this through video.js (5.6.0).

var video = document.getElementsByTagName('video')[0];
var poster = video.getAttribute('poster');
var sources = video.getElementsByTagName('source');
var tracks = video.getElementsByTagName('track');

if (poster != null)
{
    var newposter = addChk(poster, "p");  // generates modified source
    video.setAttribute('poster', newposter);
}

for (var i = 0; i < sources.length; i++) {
    var s = sources[i].getAttribute('src');
    s = addChk(s,"f");                    // generates modified source
    sources[i].setAttribute('src', s);
}

for (var i = 0; i < tracks.length; i++)
{
    var s = tracks[i].getAttribute('src');
    s = addChk(s, "c");                   // generates modified source
    tracks[i].setAttribute('src', s);
}

Thanks.

I needed to read and then modify some of the tags and attributes in the video element, which uses video.js as its player. I have been able to read the information using getElementsByTagName and getAttribute, as shown in the code below. But I was hoping there was an easier/better/best way to do this through video.js (5.6.0).

var video = document.getElementsByTagName('video')[0];
var poster = video.getAttribute('poster');
var sources = video.getElementsByTagName('source');
var tracks = video.getElementsByTagName('track');

if (poster != null)
{
    var newposter = addChk(poster, "p");  // generates modified source
    video.setAttribute('poster', newposter);
}

for (var i = 0; i < sources.length; i++) {
    var s = sources[i].getAttribute('src');
    s = addChk(s,"f");                    // generates modified source
    sources[i].setAttribute('src', s);
}

for (var i = 0; i < tracks.length; i++)
{
    var s = tracks[i].getAttribute('src');
    s = addChk(s, "c");                   // generates modified source
    tracks[i].setAttribute('src', s);
}

Thanks.

Share Improve this question asked Feb 6, 2016 at 6:24 kgcodekgcode 1593 silver badges14 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 4

As you're using video.js you should use its API for these. Directly modifying the video element after the player creation won't always work as expected, and if you ever have a different playback tech in use (such as Flash on IE8) there won't even be a video element.

var player = videojs('my_player_id');

// Get/set poster:
console.log(player.poster());
player.poster('//example./poster.jpg');

// Get source:
console.log(player.currentSrc());

// Update source:
player.src({src: '//example./video.mp4', type: 'video/mp4'});

// Multiple sources:
player.src([
  {src: '//example./video.m3u8', type: 'application/x-mpegURL'},
  {src: '//example./video.mp4', type: 'video/mp4'}
]);

For updating tracks you'll need to remove the existing track(s) before adding for now.

// Remove tracks:
var tracks = player.textTracks();
for (i = 0; i<tracks.length;i++) {
  player.removeRemoteTextTrack(tracks[i]);
}
// Add a track
player.addRemoteTextTrack({
  kind: 'captions',
  src: '//example./captions.vtt',
  srclang: 'is',
  label: 'íslenska'
});
// never touch videoElement again. It's owned by videojs now.
var player = videojs(videoElement);

// IWillNotUseThisInPlugins is mandatory, per videojs spec
// https://github./videojs/video.js/issues/2617
player.tech({IWillNotUseThisInPlugins: true}).getAttribute('playsinline')

发布评论

评论列表(0)

  1. 暂无评论