当前位置: 首页 > 知识库问答 >
问题:

自定义静音/取消静音按钮Youtube API

陈寒
2023-03-14

前言:

我想说的是,我已经尽了最大努力避免把这个问题变成重复的问题,也就是说,我自己搜索了谷歌,阅读了很多其他类似的问题,等等。我发现了很多非常有用的东西,这些东西让我找到了这个特定的情况,我有代码要展示,所以希望我的最后一个问题能够清楚地回答。

我有一个简单的网站,用纯HTML和CSS引导建立。主页上有一个嵌入式的全屏Youtube视频,展示了一些歌手。因此,视频上的声音是需要的,但我还想要一个静音按钮,而不提供youtube视频的所有控制(暂停/播放、质量、字幕等)。

我已经使用他们开发页面上的Youtube API在JSFIDLE中成功地实现了这一点。http://jsfiddle.net/Bvance/8bzxp9c2/

问题:

问题是,使用我网站上工作的JsFiddle中完全相同的代码,我得到了错误Uncaught-TypeError:player。IsMute不是HTMLDivelment的函数。

这是我的HTML:

<div class="container-fluid video-background" id="home">
    <iframe id="myPlayer" width="100%" height="100%" src="https://www.youtube.com/embed/videoseries?list=PLr3L2qYLOPjj8caQDOfdhuvHSWQdrUAjq&
    autoplay=1
    &disablekb=1
    &enablejsapi=1
    &loop=1
    &controls=0
    &mute=0
    &index=1
    " frameborder="0" allowfullscreen></iframe>

    <a href="#welcome" title="Welcome" id="welcome-down">
        <span class="glyphicon glyphicon-chevron-down"></span>
    </a>

    <div id="muteButton">
</div>

这是我的Javascript:

//Necessary to laod the Youtube API
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

var player;
function onYouTubeIframeAPIReady() {

  console.log(player);

  player = new YT.Player('myPlayer', {
    events: {
      'onReady': onPlayerReady,
      'onStateChange': onPlayerStateChange,
      'onError': onPlayerError
    }
  }); 
}

function onPlayerError(event) {
  alert(event.data);
}

function onPlayerReady() {
  alert("hey Im ready");
  //do whatever you want here. Like, player.playVideo();

}

function onPlayerStateChange() {
  alert("my state changed");

}
//Setting the event listener to the mute button
document.getElementById("muteButton").addEventListener('click', function (event) {
      console.log(player);

      if(player.isMuted())
      {
        player.unMute();
      } else {
        player.mute();
      }
});

这个javascript只是完整文件的一个片段,但它是文件中的第一件事。我使用了一些JQuery,并有一个$(文档)。准备好了{code>,在这部分代码下面。我知道,把API调用放进去是行不通的(我已经试过了)。

我试过的:

在我的调试中,我在进行YT. Player()调用之前和之后一直在将player对象打印到控制台,并且一个对象正在返回。尽管由于某种原因,它无法访问我网站上的任何功能。但是,当检查JSFiddle代码时,它确实会在打印到控制台时显示所有内容。

您可以将其与控制台中打印的播放器对象进行比较,同时使用控制台的JSFiddle屏幕截图来打印“播放器”对象

我已经尝试过将document.getElementById("muteButton"). addEventListener移动到不同的地方,包括onYouTubeIframeAPIReady()内部,但没有用。我还尝试过将这整块javascript移动到js文件的末尾和$(文档)内。就绪{只是为了尝试不同的东西。什么都没有。

我错过了什么?感谢您阅读到目前为止!

更新:

所以我在处理JSFIddle,试图精简托管的站点代码,直到它可以像工作的JSFIddle一样工作,但我甚至达到了这样的程度:两个fiddle是相同的,一个仍然不工作。我被难住了。我甚至复制并粘贴了一个新的工作小提琴和新的一个也没有工作!我真的不知道发生了什么。。


共有1个答案

呼延景同
2023-03-14

这里的问题是“player.ismute()”不必返回布尔值。它可以/不能。因此,您应该确保检查返回布尔值。在这种情况下,快速的方法是使用双重否定技巧。因此:

尝试更改:

if(player.isMuted())
      {
        player.unMute();
      } else {
        player.mute();
      }

进入

if(!!player.isMuted())
      {
        player.unMute();
      } else {
        player.mute();
      }

这样为我工作。

如果你想获得更多关于这个解决方案的信息,请查看以下文章:codereviewvideos。com/blog/example-javascript双负或sitepoint。com/javascript双重否定技巧麻烦或Jamie Treworgy回答如下:stackoverflow.com/questions/10467475/double-negation-in-javascript-what-is-the-purpose

 类似资料:
  • https://www.twilio.com/docs/voice/twiml/conference#属性-静音 它起作用了,所有参与者都静音了。现在我想知道如何允许每个用户使用Android上的Twilio语音SDK单独取消静音。 这很奇怪,因为在接收调用时,是即使调用是静音的。然后,当尝试使用取消对调用的静音时,不会发生任何事情,调用仍然是静音的。

  • 我正尝试使用以下命令与最新的ffmpeg构建从我的.mp3文件中删除静默: 但是,会产生以下输出: 感谢任何帮助!

  • 问题内容: 最近,我一直在询问有关discord.py的大量问题,这就是其中之一。 有时候,有些人向您的不和谐服务器发送垃圾邮件,但踢或禁止它们似乎太苛刻了。我想到了一个命令,该命令将在给定的时间内删除通道上的所有新消息。 到目前为止,我的代码是: 我这一节中的代码是: 所有使用的变量都在bot的顶部预先定义。 我的问题是,该漫游器会删除其有权访问的所有频道中的所有新消息。我尝试放入该部分,但这使

  • 因此,我编写了下面的代码,该代码将使给定通道中的所有成员静音: 但是它不起作用,我无法找出原因,因为我真的不知道setMute()函数是如何工作的。 编辑:我不确定如何访问每个成员并使其静音

  • 如前所述。我正在尝试为我的Discord机器人创建一个临时静音命令。我遇到的问题是,它创建了一个静音的角色,但即使我更改了烫发,用户仍然可以编写消息。除此之外,我还收到了以下弃用警告: (节点:15956)弃用警告:集合#查找:改为传递函数

  • 本文向大家介绍Android实现定时自动静音小助手,包括了Android实现定时自动静音小助手的使用技巧和注意事项,需要的朋友参考一下 定时静音助手的实现方法,供大家参考,具体内容如下 背景 突发奇想,刚好这学期刚上安卓课程,想设计一个时间助手。工作、学习中经常会被突如其来的电话所打扰,在上班,上课时这突如其来的铃声会惹来别人的反感,而只靠人们的记性是很难在准确的时间记得静音。如果一直静音,那么在