Javascript 设置HTML5音频位置

Javascript 设置HTML5音频位置,javascript,google-chrome,html5-audio,Javascript,Google Chrome,Html5 Audio,如何跳转到HTML5音频元素中的特定时间偏移 他们说你可以简单地设置他们(我的)重点: 获取时,currentTime属性必须返回当前时间 播放位置,以秒表示打开设置,如果媒体 元素具有当前媒体控制器,则它必须抛出 无效的\u状态\u错误异常;否则,用户代理必须寻求 新值(可能引发异常) 唉,它似乎不工作(我需要它在铬) 也有类似的问题,尽管没有答案。在 确保在音频元素准备播放后尝试设置currentTime属性。您可以将函数绑定到规范中定义的oncanplay事件属性 您可以发布一个失败的代码

如何跳转到HTML5音频元素中的特定时间偏移

他们说你可以简单地设置他们(我的)重点:

获取时,
currentTime
属性必须返回当前时间 播放位置,以秒表示打开设置,如果媒体 元素具有当前媒体控制器,则它必须抛出 无效的\u状态\u错误异常;否则,用户代理必须寻求 新值(可能引发异常)

唉,它似乎不工作(我需要它在铬)

也有类似的问题,尽管没有答案。


确保在音频元素准备播放后尝试设置
currentTime
属性。您可以将函数绑定到规范中定义的
oncanplay
事件属性


您可以发布一个失败的代码示例吗?

若要跳转音频文件,必须正确配置服务器

客户端发送搜索和播放文件的某些区域,因此服务器必须充分响应:

为了支持搜索和播放媒体的区域 尚未下载,Gecko使用HTTP 1.1字节范围的请求 从搜索目标位置检索媒体。另外,如果你 不提供X-Content-Duration头,Gecko使用字节范围请求 寻找媒体的结尾(假设您提供内容长度) 标头)以确定介质的持续时间

然后,如果服务器正确响应字节范围请求,则可以通过
currentTime
设置音频位置:

audio.currentTime = 30;
请参阅MDN(实际上,其他格式也是如此)


另外,请参见。

我遇到的问题是音频进度条不工作,但音频工作正常。这个代码对我有用。希望它也能帮助你。 这里歌曲是音频组件的对象

HTML部分

<input type="range" id="seek" value="0" max=""/>

@katspaugh的答案是正确的,但有一个解决方案不需要任何额外的服务器配置。其思想是将音频文件作为blob,将其转换为
dataURL
,并将其用作
audio
元素的
src

下面是angular
$http
的解决方案,但如果需要,我也可以添加vanilla JS版本:

$http.get(audioFileURL,
        {responseType:'blob'})
        .success(function(data){
            var fr = new FileReader;
            fr.readAsDataURL(data);
            fr.onloadend = function(){
                domObjects.audio.src = fr.result;
            };
        });
告诫
  • 此解决方法不适用于大型文件
  • 除非正确设置COR,否则它不会跨原点工作
  • 一个简单得多的解决方案是

    var element = document.getElementById('audioPlayer');
    
    //first make sure the audio player is playing
    element.play(); 
    
    //second seek to the specific time you're looking for
    element.currentTime = 226;
    

    Firefox在查找尚未加载的内容时也会发出字节范围请求,这不仅仅是chrome的问题。 设置响应头“Accept Ranges:bytes”,并返回206部分内容状态代码,以允许任何客户端发出字节范围请求


    请参见将时间位置设置为5秒:

    var vid = document.getElementById("myAudio");
    vid.currentTime = 5;
    

    音频视频媒体都接受
    #t
    URI

    song.mp3#t=8.5

    动态跳过到特定点,请使用:


    龙,我来试试,谢谢!尽管如此,当音频已经播放时,我从控制台设置了
    currentTime
    。soemarko,谢谢!将音频URL设置为jsbin中提供的URL后,
    currentTime
    开始工作。所以我想这是服务器的问题,因为我使用了
    python-msimplehttpserver
    来提供一个音频文件,也就是说SimpleHTTPServer只是一个HTTP 1.0服务器,它不理解字节范围请求。+1用于用JavaScript回答JavaScript问题,而不是一个lets-all-jump-off-a-bridge-because-everyone-else-is框架。据我所知,WebKit/Chrome搜索仅在使用
    接受范围:字节时有效,即使对于已经缓冲的数据(设置
    内容长度
    X-Content-Duration
    也没有帮助)。。。这是相当奇怪的,因为不是所有的后端都能够支持内容范围(我的不支持,因为我们在运行中转换文件)。。。Firefox更理智,工作正常(您可以在缓冲内容中查找,而不是在非缓冲内容中查找)。我所要处理的正是-Django的Web服务器无法处理字节范围请求,并且无论加载状态或传递的currentTime值如何,播放总是从Chrome的开始。因此,总而言之,将
    标题集Accept Ranges bytes
    放入
    .htaccess
    各位,谢谢。我从2013年就开始关注这一点:|修复了它,它似乎在所有浏览器中都不能作为直接链接使用,但仍然很有用。我认为该链接已经过时了。这是我找到的链接:@KurtMueller两个链接都可以。谢谢,我不认为你发布的第一个链接告诉你如何设置音频文件的时间范围。我发现“#t=?”格式非常不可靠,通常不起作用。尽管我不确定你是否需要一个数据URL,你能不能生成一个blob URL:URL.createObjectURL(data)?@bluejayke是,获取数据后,您可以执行以下操作:
    URL.createObjectURL(新Blob([data]))
    ,但您需要从Blob数据中创建一个新Blob对象
    var element = document.getElementById('audioPlayer');
    
    //first make sure the audio player is playing
    element.play(); 
    
    //second seek to the specific time you're looking for
    element.currentTime = 226;
    
    var vid = document.getElementById("myAudio");
    vid.currentTime = 5;
    
    audio.currentTime = 8.5;