| html5 audio video不需要插件即可播放音频和视频,currentTime可以用来设置播放的起始时间,使得可以不从文件开头开始播放。如果 html5 audio video设置currentTime失效,无法设置开始播放的时间点,audio/video不能拖动进度条调整播放进度,很有可能是使用了php asp jsp等服务器后端语言动态输出待播放的媒体文件内容,如果audio/video播放的媒体资源文件不是静态文件,不经过处理直接通过服务器语言动态输出流媒体内容,设置currentTime不会生效。 为什么直接使用静态的.mp3 .mp4 .flac等媒体文件时支持使用 audio | video .currentTime = NUMBERIC; (NUMBERIC是一个数字,可以是整数,也可以是浮点数)来设置播放起始位置呢,而动态输出流媒体文件内容时不行呢? 这其中的核心技术就是服务器端对断点续传的支持,断点续传允许客户端从服务器提取某个文件指定字节范围内的一部分内容,当下载中断以后再次下载时可以只请求下载原先没有下载的部分,避免重复传输现有内容。当客户端(浏览器)检测到服务器支持断点续传以后才会发送相应的区间内容请求给服务器,服务器接到请求以后再返回相应范围内的文件内容,这样才能实现流媒体文件的定点播放。而直接使用静态文件做播放资源时,服务器软件通常会自动处理断点续传请求。 实现动态流媒体文件支持通过HTML5 audio/video.currentTime设置播放起始时间点,可以使用以下两种方法。 方法一:使用服务器模块X-SendFile输出流媒体文件内容来解决currentTime失效的问题,以Apache服务器为例。 首先下载mod_xsendfile,将模块文件复制到Apache的modules目录,在Apache配置文件中添加
安装了X-SendFile模块以后,PHP输出媒体文件变得非常简单。其中的Content-Type是要输出文件的MIME类型,可以不必写死而通过服务器语言获取。可以参见方法二有实例代码。
复制代码
function downloadmp3($file) if (isset($_SERVER['HTTP_RANGE']) && !empty($_SERVER['HTTP_RANGE'])) { $start = $range[0]; //构造断点续传响应头 header('Content-Type: audio/mpeg'); if ($start > 0) { $bytesPosition = $start; $chunk = 1024 * 1024 * 50; //每次读取50k $chunk = fread($fp, $chunk); print($chunk); $bytesPosition += $chunk; fclose($fp);
|
关于动态生成的mp3在audio标签无法拖动的问题
最新推荐文章于 2025-09-20 18:17:58 发布
本文探讨了HTML5 audio和video元素在不同情况下播放媒体文件的挑战,特别是使用动态输出内容时currentTime属性的失效问题。文章提供了两种解决方案,一是通过Apache服务器的X-SendFile模块,二是使用PHP模拟断点续传来支持任意播放起点。
1139

被折叠的 条评论
为什么被折叠?



