gpt4 book ai didi

php - 播放特定格式的 m4a

转载 作者:可可西里 更新时间:2023-10-31 23:32:58 24 4
gpt4 key购买 nike

我一直在搜索这个主题,但一无所获。我应该在网页上加载一定数量的 .m4a 文件,每个文件都在一个单独的播放器中。我找到并实现了 jplayer,它声称可以处理格式。我决定默认使用 flash 回退以避免向后不兼容。 jplayer 示例中提供的示例 m4a 文件 (http://www.jplayer.org/audio/m4a/TSP-01-Cro_magnon_man.m4a) 工作正常,但我还没有播放任何我拥有的文件。

我对所有文件运行了 file unix 命令。 jplayer 的示例文件返回:

  • ISO 媒体,MPEG v4 系统,版本 2
  • 非工作文件返回以下之一:

  • ISO 媒体、MPEG v4 系统、3GPP
  • ISO 媒体,MPEG v4 系统,版本 1
  • ISO 媒体、MPEG v4 系统、iTunes AAC-LC
  • 我使用以下 PHP Controller 代码加载音频文件。我需要这样做才能“重写”URL 并隐藏文件的实际 URI。

    header('Content-Type: audio/mp4');
    header('Content-Disposition: inline; filename=xxxxxxxxxxTrack'.$id.'.m4a');
    echo file_get_contents(MVC::siteRoot().'/'.$filename);

    (MVC::siteRoot() 返回存储脚本的物理目录。)我也再次尝试 Content-Type: audio/mp4a-latm 无济于事。我使用以下代码加载 jplayer:

    $('.jp-jplayer').each(function() {
    $(this).jPlayer({
    ready: function () {
    console.log($(this).attr('data-src'));
    $(this).jPlayer("setMedia", {
    m4a: $(this).attr('data-src')
    });
    $("#insp").jPlayerInspector({jPlayer:$(this)});
    },
    swfPath: "<?=MVC::httpRoot();?>/gui/swf/Jplayer.swf",
    supplied: 'm4a',
    wmode: 'window',
    solution:"flash",
    errorAlerts:true,
    warningAlerts:true,
    cssSelectorAncestor: '#' +
    $(this).attr('id').replace('jquery_jplayer','jp_container')
    });
    });

    在 DOM 端,对于每个由渐进数字 $i 标识的音频文件,会发生这种情况:

    <div id="jquery_jplayer_<?=$i?>" class="jp-jplayer" data-src="<?=MVC::httpRoot()?>/get/audio/<?=$traccia['audioid']?>"></div>
    <div id="jp_container_<?=$i?>" class="jp-audio">[...]

    播放器似乎加载正确,DOM 根据 jplayer 重新排列,但按下播放按钮时没有任何反应。代表网络没有发现错误,文件已正确传送,但内容未播放,也未发出警告或错误。实际上,我听这些文件的唯一方法是下载它们并在 QuickTime 中打开它们,因为即使 Chrome 也不会播放它们。另一方面,Safari 会很乐意加载和播放文件,但不会在网站内部加载和播放文件。遗憾的是,我无法直接控制上传文件的内容,因为它们来自 iOS/Android 应用程序,并且客户端出于某种原因要求使用 .m4a 格式。有没有人遇到过类似的问题?

    最佳答案

    1. DRM 问题

    2. MIME 类型

    您域的服务器必须为所有媒体 URL 提供正确的 MIME 类型(内容类型)。

    未能提供正确的 MIME 类型将使媒体无法在某些 HTML5 浏览器上运行。这是仅影响 Firefox 和 Opera 的问题的常见原因。其他浏览器没有那么严格,但如果您在任何浏览器上播放媒体时遇到问题,应始终检查 MIME 类型是否正确。

    媒体 MIME 类型

        MP3: audio/mpeg
    MP4: audio/mp4 video/mp4
    OGG: audio/ogg video/ogg
    WebM: audio/webm video/webm
    WAV: audio/wav

    如果您对音频和视频媒体使用通用扩展名,例如 audio.mp4 和 video.mp4,则只需为它们使用 MIME 类型的视频版本。即,视频/mp4

    在 Apache 服务器上,您可以使用 .htaccess 文件根据文件扩展名设置 MIME 类型:

    # AddType TYPE/SUBTYPE EXTENSION

    AddType audio/mpeg mp3
    AddType audio/mp4 m4a
    AddType audio/ogg ogg
    AddType audio/ogg oga
    AddType audio/webm webma
    AddType audio/wav wav

    AddType video/mp4 mp4
    AddType video/mp4 m4v
    AddType video/ogg ogv
    AddType video/webm webm
    AddType video/webm webmv

    3。字节范围请求

    您的服务器必须启用范围请求。通过查看服务器的响应是否在其 header 中包含 Accept-Ranges 可以很容易地检查这一点。大多数 HTML5 浏览器都可以在下载过程中寻找新的文件位置,因此服务器必须允许请求新的范围。

    无法接受字节范围请求会导致某些 HTML5 浏览器出现问题。通常无法从文件中读取持续时间,因为某些格式需要读取文件的开头和结尾才能知道其持续时间。如果服务器上未启用 Range 请求,Chrome 往往是问题最多的浏览器,但所有浏览器都会有一些问题,即使只是您必须等待所有媒体加载后再跳到接近尾端.

    已知此问题会影响默认配置的 Jetty 6 服务器。

    https://groups.google.com/d/msg/jplayer/nSM2UmnSKKA/bC-l3k0pCPMJ

    1. 保护您的媒体

    尝试限制对媒体文件的访问时要小心。用户必须可以通过互联网访问媒体 URL,并且其响应必须采用预期的格式。

    使用服务器响应来禁用本地媒体缓存可能会导致某些 HTML5 浏览器出现问题。这可能会导致媒体持续时间未知,这将在 jPlayer 的持续时间中显示为 NaN。

    如果您在后端施展魔法以使其更安全,它们会确保您接受上述字节范围请求。

    是的,我刚刚复制/粘贴了常见问题解答,对此一无所知

    关于php - 播放特定格式的 m4a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12584584/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com