使用指向不同质量版本的源更改视频质量

Vad*_*dim 9 html javascript jquery html5-video

目标:

我正在尝试使用尽可能少的代码混乱来实现一个控件,这将允许更改视频的质量。

喜好:

以下是我得到的,我宁愿解决它。我愿意使用预先构建的插件或 javascript/jquery hack,但不想寻求涉及重新发明(我或你)轮子的解决方案(需要构建自定义视频控制方案),但会接受它作为最后的结果。

编辑:

对不起。并不意味着有这种相关性,因为 url 没有反映任何类型的模式。我把它简单化了,没有假设人们会查看 URL 以获取模式。但是谢谢你的开始,因为我可能可以使用它。再次抱歉。我会将网址更改为没有任何模式。

<video controls preload>
   <source label="fullHD" src="http://v.com/lorem.mp4" type="video/mp4">
   <source label="720p"   src="http://v.com/ipsum.mp4" type="video/mp4" >
   <source label="360p"   src="http://v.com/dolor.mp4" type="video/mp4">
</video>
Run Code Online (Sandbox Code Playgroud)

预先感谢任何可以提供一些见解的人。

Abd*_*UMI 6

你不需要很多source标签。一个就够了,但是,您需要更改source属性的值,即src

var map={'fullHD':'1080p','720p':'720p','360p':'360p'};


function changeQ(quality){
     $('source','video#player').attr('src','http://v.com/'+map[quality]);
      $('span#pp').html(map[quality]);
     console.log($('source','video#player').attr('src'))
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"> 
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>

<div class="dropdown">
 <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Quality
 (<span id="pp"></span>)</button>
 <ul class="dropdown-menu">
   <li><a href="#" onclick="changeQ('fullHD')">FullHD</a></li>
   <li><a href="#" onclick="changeQ('720p')">720p</a></li>
   <li><a href="#" onclick="changeQ('360p')">360p</a></li>
 </ul>
</div>


<video id="player" width="400" controls>
 <source src="http://v.com/1080p" type="video/mp4">

</video>
Run Code Online (Sandbox Code Playgroud)


Vad*_*dim 6

抱歉问了。事实证明,我几乎可以自己解决所有问题。讨厌那些时刻。这是我想出的解决方案,它只涉及<source>根据label属性复制我需要的内容,将其删除,然后将其添加到<video>元素中:

HTML

<div class='vidcontainer'>
   <select class='qualitypick' autocomplete='off'>
      <option selected>fullHD</option>
      <option>720p</option>
      <option>360p</option>
   </select>
   <video controls preload>
      <source label="fullHD" src="http://v.com/lorem.mp4" type="video/mp4">
      <source label="720p"   src="http://v.com/ipsum.mp4" type="video/mp4" >
      <source label="360p"   src="http://v.com/dolor.mp4" type="video/mp4">
   </video>
</div>
Run Code Online (Sandbox Code Playgroud)

爪哇脚本

$(document).ready(function(){
   $('.qualitypick').change(function(){ 

      //Have several videos in file, so have to navigate directly
      video = $(this).parent().find("video");

      //Need access to DOM element for some functionality
      videoDOM = video.get(0);

      curtime = videoDOM.currentTime;  //Get Current Time of Video
      source = video.find("source[label=" + $(this).textContent + "]"); //Copy Source

      source.remove();                 //Remove the source from select
      video.prepend(source);           //Prepend source on top of options
      video.load();                    //Reload Video
      videoDOM.currentTime = curtime;  //Continue from video's stop
      videoDOM.play();                 //Resume video
   })
})
Run Code Online (Sandbox Code Playgroud)

虽然这不是我的本意,但我希望我的回答有些用处。再次抱歉在考虑之前询问。