传递给createMediaElementSource的HTMLMediaElement具有跨源资源,节点将输出静音

Dam*_*les 5 javascript audiocontext web-audio-api

我正在测试改变视频的音频增益。我创建了一个示例 HTML 页面,视频文件与 HTML 文件位于同一目录中。没有网络服务器;我刚刚在本地磁盘上创建了该文件并使用 FireFox 打开它。代码如下,但是当我单击按钮时,我得到了

传递给createMediaElementSource的HTMLMediaElement具有跨域资源,该节点将输出静默。

并且音频被静音。我怎样才能解决这个问题?我在这里搜索并找到了这个,答案是“解决方案是将 crossOrigin="anonymous" 属性添加到相应的音频元素。” 但这似乎不起作用。

   <script crossOrigin="anonymous">
        function gain(value)
        {
            var vid = document.getElementById("testvideo");

            var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
            var gainNode = audioCtx.createGain();
            gainNode.gain.value = value;

            var source = audioCtx.createMediaElementSource(vid);
            ...
        }
    </script>
</head>
<body>
    <video id="testvideo" width="640", height="360" controls>
        <source src="sample.webm" type="video/mp4" crossOrigin="anonymous"/>
    </video>    

    <div>
        <button onclick="gain(2)">Gain 2</button>
    </div>
Run Code Online (Sandbox Code Playgroud)

小智 7

不确定这是否能解决您的问题,但是:

这里 :

Firefox WebAudio createMediaElementSource 不起作用

我遇到了同样的错误,我将 crossorigin 放入音频标签中,它似乎有效:

<div class= fph id=fph align=center>
<canvas id='canvas'></canvas>
<audio crossorigin="anonymous" src="<?php
$toevallegnummer = rand(1,3);
    if ($toevallegnummer == 1){echo "https://res.cloudinary.com/ddxo40bkm/video/upload/v1582653810/alleycat/shorty.ogg";}
    if ($toevallegnummer == 2){echo "https://res.cloudinary.com/ddxo40bkm/video/upload/v1582653811/alleycat/raveretro.ogg";}
    if ($toevallegnummer == 3){echo "https://res.cloudinary.com/ddxo40bkm/video/upload/v1582653811/alleycat/raveretrorevisedloop.ogg";}
?>" id="audio" >audio element not supported</audio>
<script src="dir/dir/somthing.js"></script>
</div>
Run Code Online (Sandbox Code Playgroud)

我不是一个真正的专业人士或任何人,但也许这会有所帮助,如果不是你,那么可能是其他人