【问题标题】:Convert m3u8 to mp4 within Java application [closed]在 Java 应用程序中将 m3u8 转换为 mp4 [关闭]
【发布时间】:2022-12-18 23:15:24
【问题描述】:

我有以下从流媒体站点下载的 m3u8 文件。

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1305636,RESOLUTION=736x414,FRAME-RATE=25.000,CODECS="avc1.4d401f,mp4a.40.2"
chunklist-f1-v1-a1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1910223,RESOLUTION=736x414,FRAME-RATE=25.000,CODECS="avc1.4d401f,mp4a.40.2"
chunklist-f2-v1-a1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2513675,RESOLUTION=736x414,FRAME-RATE=25.000,CODECS="avc1.4d401f,mp4a.40.2"
chunklist-f3-v1-a1.m3u8

由于我不是这种文件格式的专家,我想问你如何从 Java 代码将其转换为 .mp4 文件(例如,离线观看视频)。

有没有办法从 Java 使用 ffmpeg(可能有一个接口,而不直接调用进程)将 m3u8 转换为 mp4?

谢谢你 。

我尝试了一些在线工具,但我想通过 Java 代码来完成。

【问题讨论】:

  • m3u 文件是播放列表文件。它可以包含任何文件的组合,它实际上只是一个列表。甚至可以包含文本文件。试图将所有这些拼接成一个能够在任何设备上播放的视频 mp4 非常复杂。绝对没有 java 库可以在“进程中”执行此操作 - ffmpeg 在这里有很大帮助;我认为根本不涉及java。 “如何使用 ffmpeg 将 m3u 转换为 mp4”是您应该问的问题——这已经非常复杂了。

标签: java video video-streaming mp4 m3u8


【解决方案1】:

重新发明轮子可能有点矫枉过正,但你去吧。要在 Java 中将 m3u8 文件转换为 mp4 文件,您可以使用 javacv 库中的 FFmpegFrameGrabber 和 FFmpegFrameRecorder 类。这些类提供了从 m3u8 文件读取帧并将它们写入 mp4 文件的方法。

以下是如何使用这些类将 m3u8 文件转换为 Java 中的 mp4 文件的示例:

// create a frame grabber to read frames from the m3u8 file
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("input.m3u8");
grabber.start();

// create a frame recorder to write frames to the mp4 file
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("output.mp4", grabber.getImageWidth(), grabber.getImageHeight());
recorder.start();

// read frames from the m3u8 file and write them to the mp4 file
Frame frame;
while ((frame = grabber.grabFrame()) != null) {
    recorder.record(frame);
}

// close the frame grabber and recorder
grabber.stop();
recorder.stop();

在此示例中,FFmpegFrameGrabber 用于从 m3u8 文件读取帧,FFmpegFrameRecorder 用于将帧写入 mp4 文件。循环从抓取器读取每一帧并将其写入记录器。

请注意,此示例假定 javacv 库已安装并在类路径中可用。您可能还需要在您的系统上安装 ffmpeg 命令行工具,以便示例运行。

总的来说,使用 Java 中的 javacv 库是将 m3u8 文件转换为 mp4 文件的有用方法。通过使用 FFmpegFrameGrabber 和 FFmpegFrameRecorder 类,您可以轻松地在 Java 代码中读写视频帧。

【讨论】:

  • 听起来不错,我试试看!
  • @NiccolòCavallini 抓取帧并重新编码为新的视频文件是代码矫枉过正。 M3U8 包含指向实际视频文件的链接。打开块列表-f2-v1-a1.m3u8并亲自看看。通常视频文件是 H264/MP4,但它被包装在容器格式中,如 .ts.m4s 等,因此您只需保存这些列出的文件,从中提取 MP4 或 H264 部分,最后...加入将那些保存/提取的字节添加到完整视频的 MP4 中。您需要了解 MP4 结构(使用十六进制编辑器) 以及如何读/写字节(尝试基本的“hello”文本文件写入和读取)。
  • 我明白你的意思,但是 chunklist-f2-v1-a1.m3u8 不是完整的 URL,那么我怎样才能找到实际文件呢?
  • 顺便说一句,这是我从中获取 m3u 的原始 URL:mediapolisvod.rai.it/relinker/…。这仅适用于意大利或使用 VPN :)
  • 这个答案 also 是由 ChatGPT 生成的吗?有些措辞看起来像。
猜你喜欢
  • 2016-01-11
  • 2012-04-20
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
相关资源
最近更新 更多