如何使用nodejs生成m3u8文件?

问题描述 投票:0回答:1

如何生成m3u8文件?

我想使用Node.js生成m3u8文件,但不是直接使用ffmpeg命令(ffmpeg -i xxx -f hls index.m3u8)。

即使我添加了 -hls_time 10 参数,我也注意到 ffmpeg 生成的 m3u8 文件中每个片段的持续时间并不是一致的 10 秒,所以我不能简单地写#EXTINF:10。

根据我的研究,这种不一致似乎与 I 帧有关。我尝试使用 ffprobe 检索视频的 I 帧,但没有收到任何输出数据。

ffprobe -v error -skip_frame nokey -select_streams v:0 -show_entries frame=pkt_pts_time -of csv=print_section=0 xxx.mkv

我正在使用 .mkv 文件,希望获得一些帮助。

node.js ffmpeg http-live-streaming m3u8
1个回答
0
投票

要在 Node.js 中生成具有一致分段持续时间的 M3U8 文件而不直接使用 ffmpeg,您可以使用 fluid-ffmpeg 等库来处理视频处理和分段。以下是如何实现此目标的基本示例:

const ffmpeg = require('fluent-ffmpeg');
const fs = require('fs');

const inputFilePath = 'input.mkv';
const outputDirectory = 'output_folder';

// Ensure the output directory exists
if (!fs.existsSync(outputDirectory)) {
    fs.mkdirSync(outputDirectory);
}

// Run ffmpeg to segment the video
ffmpeg(inputFilePath)
    .outputOptions([
        '-hls_time 10', // Set segment duration to 10 seconds
        '-hls_list_size 0', // Allow an unlimited number of playlist entries
        '-hls_segment_filename ' + outputDirectory + '/segment_%03d.ts' // Define segment filename pattern
    ])
    .output(outputDirectory + '/playlist.m3u8')
    .on('end', function() {
        console.log('Segmentation complete');
    })
    .on('error', function(err) {
        console.error('Error during segmentation:', err);
    })
    .run();

该脚本使用 Fluent-ffmpeg 将 inputFilePath 指定的视频分割成 10 秒的片段。这些片段保存在 outputDirectory 中,并通过引用这些片段创建 M3U8 播放列表文件 (playlist.m3u8)。

确保您的 Node.js 项目中安装了 Fluent-ffmpeg:

npm install fluent-ffmpeg

确保将 input.mkv 替换为输入视频文件的路径。

这种方法应该可以让您更好地控制分段过程,并有助于在 M3U8 文件中保持一致的分段持续时间。

© www.soinside.com 2019 - 2024. All rights reserved.