相关疑难解决方法(0)

带有嵌入式YouTube视频的Android WebView,全屏按钮冻结视频

我有一个Android webview加载一个wordpress博客.一些博客文章包含youtube视频,我希望用户可以根据需要全屏显示.问题是HTML5全屏按钮在单击时不执行任何操作但冻结视图.有任何想法吗?

youtube html5 android webview

29
推荐指数
1
解决办法
3万
查看次数

使用iframe和javascript API全屏显示youtube视频

我有一个隐藏控件的嵌入式YouTube视频:

<iframe id="ytplayer" type="text/html" width="400" height="225"
src="http://www.youtube.com/embed/dMH0bHeiRNg?rel=0&controls=0&showinfo=0
&loop=1&hd=1&modestbranding=1&enablejsapi=1&playerapiid=ytplayer"
frameborder="0" allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)

我可以使用youtube Javascript API来控制它.

var tag = document.createElement('script');

tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('ytplayer', {
  events: {
    'onReady': onPlayerReady,
    'onStateChange': onPlayerStateChange
  }
});
}
Run Code Online (Sandbox Code Playgroud)

player.playVideo()等等的东西完美地工作.现在我正在寻找一种方法,通过Javascript调用使视频在全屏模式下播放,但我在API中找不到任何方法.

它甚至可能(没有控制),如果是这样 - 如何?

javascript youtube youtube-api

16
推荐指数
4
解决办法
5万
查看次数

如何使用 JavaScript 添加一个按钮来全屏播放 YouTube 视频?

我正在编写一个 Google Chrome 扩展程序,其中嵌入了 YouTube 视频:

<iframe id="ytplayer" type="text/html" width="640" height="360"
src="https://www.youtube.com/embed/M7lc1UVf-VE"
frameborder="0" allowfullscreen>
Run Code Online (Sandbox Code Playgroud)

然后,我在下面添加了一个按钮,允许用户单击以全屏播放该视频:

<a href="#" id="lnkFullScreen">Play full screen</a>
Run Code Online (Sandbox Code Playgroud)

这项工作是通过 JavaScript(和 jQuery)使用我在这里找到的代码完成的:

$("#lnkFullScreen").click(function(e)
{
    e.stopPropagation();
    e.preventDefault();

    var playerElement = document.getElementById("ytplayer");

    playerElement.playVideo();   //`playVideo` is undefined

    var requestFullScreen = playerElement.requestFullScreen || playerElement.mozRequestFullScreen || playerElement.webkitRequestFullScreen;
    if (requestFullScreen)
    {
        requestFullScreen.bind(playerElement)();
    }
});
Run Code Online (Sandbox Code Playgroud)

但是当我运行这段代码时,该playVideo函数undefined适用于playerElement.

知道我做错了什么吗?

附言。我希望我的播放器保留 HTML5。

javascript youtube google-chrome youtube-api google-chrome-extension

5
推荐指数
1
解决办法
5262
查看次数

Youtube + Selenium(Python) - 如何知道视频何时结束?

[编辑:已解决,请参阅问题文本中途]

有关了解Youtube页面内容的快速提问:播放视频:

综上所述

我使用Selenium在Youtube上播放视频,作为基于浏览器的GUI的一部分.

我需要知道视频何时播放完毕,因为GUI会执行其他操作(例如,在浏览器中提供本地HTML).

代码段和问题

import os, time
from selenium import webdriver

# [...]
chromedriver = 'path_to_chromedriver_binary'  # substitute as appropriate
driver = webdriver.Chrome(chromedriver)
youtube_link = 'https://www.youtube.com/watch?v=somevideo'
driver.get(youtube_link)
Run Code Online (Sandbox Code Playgroud)

此时我可以time.wait()查看视频的长度.

但是,我想知道我是否可以通过selenium驱动程序查询youtube页面并测量while循环中播放的剩余时间(我不熟悉如何从youtube页面中提取此信息)

谢谢!

[编辑解决方案]

硒溶液

感谢Stanjer,以及这个答案其他答案,您可以movie_player通过此方法获得状态:

player_status = driver.execute_script("return document.getElementById('movie_player').getPlayerState()")
Run Code Online (Sandbox Code Playgroud)

(别忘了在脚本开头添加"return")

硒替代解决方案

不太优雅但值得指出: driver.text以字符串格式"1:00/2:00"返回表示视频计时器的字符串.因此,您可以检查视频是否通过以下内容播放:

video_is_playing = True
while video_is_playing:
    time.sleep(1)
    video_is_playing = not(driver.text[:4] == driver.text[-4:])
Run Code Online (Sandbox Code Playgroud)

[编辑]根据Jose的评论,此信息也可以通过以下方式访问:

driver.find_element_by_class_name("ytp-time-current").text
Run Code Online (Sandbox Code Playgroud)

并发症和下一个问题

我需要以最大化格式打开视频,并使用自动播放.

这意味着我调用以下url:

youtube.com/v/<video_code>?rel=0&autoplay=1
Run Code Online (Sandbox Code Playgroud)

但是这会返回一个非常短的html,它只包含一个嵌入代码,例如:

<HTML><HEAD></HEAD>
    <BODY leftMargin=0 scroll=no topMargin=0>
        <EMBED height="100%" 
        type=application/x-shockwave-flash 
        width="100%" 
        src=https://www.youtube.com/v/Fsc-oT9PsSQ?rel=0&amp;autoplay=1 …
Run Code Online (Sandbox Code Playgroud)

youtube selenium python-2.7 selenium-webdriver

5
推荐指数
1
解决办法
6946
查看次数