gpt4 book ai didi

php - 实时合并 MP3 时的 ID3 标签,使用 PHP 和 HTTP 部分内容

转载 作者:行者123 更新时间:2023-12-02 22:36:37 26 4
gpt4 key购买 nike

我们想要做的是实时添加一种 MP3 预卷到另一个 MP3 文件。这意味着我们在服务器上有两个物理 MP3 文件尚未合并为一个文件,因为 ffmpeg & Co. 花费太多时间。当有人启动(网络)播放器时,它必须是实时的,以免浪费时间。实际情况是将预卷添加到播客文件中。除了在音频播放器中显示正确的文件持续时间之外,我们已经做的(如下所述)是有效的。

我的一位同事做到了这一点,所以我尽量描述得尽可能好。

我的同事已经做的是通过读取两个文件并通过 PHP 回显它们来告诉标题两个文件连续出现。 HTTP/1.1 206 Partial Content 用于传送“合并”的内容。

问题是,两个文件中仍然有两个 ID3 标签,大多数音频播放器只读取第一个,这会导致错误的持续时间显示。下载整个内容后,它 100% 工作的唯一情况是在 VLC 中。没有网络播放器,没有 iTunes 等可以管理“合并”文件的持续时间。

知道如何实时创建“虚拟 ID3 标签”以及如何在不接触原始文件的情况下删除现有标签?

最佳答案

你得出了很多不准确的结论,所以让我从纠正这些开始,这可能会帮助你解决问题。

because ffmpeg & Co. take too much time



FFmpeg 合并这些音频流的速度肯定比您流式传输到客户端的速度要快。如果您使用的是 -codec copy (在这种情况下你应该是),它会为你处理所有的解复用/复用。而且,请记住,您可以直接从 FFmpeg 中流出。不需要中间文件。

The practical case is to add prerolls to podcast files.



FFmpeg 路线就是您想要的。

What my coworker already did is telling the header that two files are coming in a row by reading both files and echoing them via PHP. HTTP/1.1 206 Partial Content is used for delivering the "merged" content.



这是一个有点古怪的方式来做到这一点。您可以改为合并数据并直接在单个响应中发送。

The problem is, that there are still two ID3 Tags from both files and most audio players only read the first one, which occurs wrong duration displays.



不,通常的 ID3 标签不指示持续时间。 (有一个扩展,但很少使用。)在裸 MP3 流中也没有任何内容指示持续时间。客户根据文件大小和比特率估计这一点。比特率可以在中途改变,因此他们通常根据前几帧的比特率进行估计。

毫无疑问,由于您处理此合并的方式和/或比特率不匹配导致播放器的长度估计错误,因此您的案例中的问题是不正确的长度 header 。

Any idea how to create a "virtual ID3 Tag" in real time and how to remove the existing ones without touching the original files?



我绝对会使用 FFmpeg 来完成这项工作。如果有的话,因为并非所有播客都使用 MP3。 MP4 播客中有很多 AAC,WebM 中也有一些 Opus。

关于php - 实时合并 MP3 时的 ID3 标签,使用 PHP 和 HTTP 部分内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56622473/

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