gpt4 book ai didi

node.js - 如何即时将视频 *.ts 转换为 *.mp4 并在网络上播放 (node.js)

转载 作者:行者123 更新时间:2023-12-04 22:48:02 25 4
gpt4 key购买 nike

使用带有“fluent-ffmpeg”的 Node.js,我可以将视频流从 Live TV 转换为 mp4,因此它可以在 HTML5 视频中播放。
我有的:

  • 传入的视频是我接收的传输流(直播电视)
    我的服务器链接http://IP/stream/direct?channel=8724
  • 从流中接收数据并将其写入文件,例如 in.ts ,那么这个
    我将 in.ts 文件作为输入文件提供给 ffmpeg。
  • 这个方案有效,
    但是,我得到了 短输出文件 来自ffmpeg(out.mp4),甚至
    认为 in.ts 不断增长。 FFmpeg 只转换文件大小
    这是在ffmpeg开始工作的时候写的。

  • 我需要以某种方式对 FFmpeg 说,传入的文件正在增长,需要等待新数据进行进一步转换......

    也很好奇是否有办法提供这个 out.mp4 文件,该文件应该不断增长到 HTML5 视频播放器。

    这是我现在拥有的代码:
    let ffmpeg = require('fluent-ffmpeg');
    let fs = require('fs');
    let http = require('http');

    let inStream = 'http://IP/stream/direct?channel=8724';
    let inFileName = 'in.ts';
    let inWriteStream = fs.createWriteStream(inFileName);

    let isRun = false;
    let request = http.get(inStream, (d) => {
    d.on('data', (d) => {
    inWriteStream.write(d);
    console.log(getSize());
    if (getSize() > 10 && !isRun) {
    startDecode();
    isRun = true;
    }
    });
    })
    .on('error', (e) => {
    console.error(e);
    });
    function startDecode() {
    var infs = fs.createReadStream(inFileName);
    ffmpeg(infs)
    .save('out.mp4');
    console.log('Decoding....');
    }

    function getSize() {
    let stats = fs.statSync(inFileName);
    let fileSizeInBytes = stats.size;
    let fileSizeInMegabytes = fileSizeInBytes / 1000000.0;
    //size in Mb
    return fileSizeInMegabytes;
    }

    最佳答案

    标准 mp4 文件不能用于实时视频。 MP4 文件使用一种将所有帧大小编码到文件末尾(或开头)的单个位置的结构。因此,在完成并写入此信息之前,mp4 无法播放。有一种叫做“碎片化 mp4”的东西,可以制作可以背靠背播放的小 mp4。

    关于node.js - 如何即时将视频 *.ts 转换为 *.mp4 并在网络上播放 (node.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58427512/

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