Автоматическое удаление файлов .ts и .m3u8, как только клиент получит все файлы .ts - PullRequest
0 голосов
/ 05 декабря 2018

Итак, я создал экспресс-сервер, который получает файл mp3 (который хранится локально прямо сейчас, но позже будет взят из mongo db) и использует ffmpeg для создания файлов .m3u8 и .ts.Файлы успешно отправлены клиенту, и при воспроизведении на клиенте ошибок нет.Я использовал hls.js для воспроизведения этих файлов в Chrome.Но на сервере все еще хранятся эти файлы локально.Есть ли способ узнать, когда сервер может удалить эти файлы, которые он хранит локально?Ffmpeg генерирует много файлов, поэтому я не могу просто позволить им оставаться там навсегда.

Я использовал часть кода ffmpeg из hls-server github repo .

файл моего сервера

index.js

// just used to run ffmpeg for conversion
var command = ffmpeg('inp.mp3')
  .on('start', function (commandLine) {
    console.log('command', commandLine);
  }).addOptions([
    '-c:a aac',
    '-b:a 64k',
    '-vn',
    '-hls_list_size 0',
    '-segment_time 10',
  ]).output('files\\output.m3u8');

var express = require('express');
var app = express();
// express middleware to serve individual .ts and .m3u8 files when requested
app.use(express.static('./files/'));

app.get('/', function (req, res) {
  command.on('end', function () {
    console.log('done');
    res.write(`
    <script src="https://cdn.jsdelivr.net/hls.js/latest/hls.min.js"></script>
    <script>
      function onLevelLoaded (event, data) {
        var level_duration = data.details.totalduration;
        console.log(level_duration, data);
      }
      if(Hls.isSupported()) {
        var audio = new Audio();
        var hls = new Hls();
        // requesting files from here
        hls.loadSource('http://localhost:8000/output.m3u8');
        hls.attachMedia(audio);
        hls.on(Hls.Events.LEVEL_LOADED, onLevelLoaded);
        hls.on(Hls.Events.FRAG_BUFFERED, (e, d) => {
          console.log(e, d);
        });
      }
    </script>
    `);
    res.end();
  }).run();
});

app.listen(8000);

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

вы можете использовать hls_delete_threshold

"-hls_time 10",
"-hls_list_size 3",
"-hls_delete_threshold 3", 
"-hls_flags delete_segments"

hls_delete_threshold size

Устанавливать количество несвязанных сегментов, сохраняемых на диске, до того, как hls_flags delete_segments удалит их.Увеличьте это, чтобы позволить клиентам продолжать загружать сегменты, которые недавно были указаны в списке воспроизведения.Значение по умолчанию равно 1, что означает, что сегменты старше, чем hls_list_size + 1, будут удалены.

0 голосов
/ 06 декабря 2018

Это то, что я делаю в моем процессе ffmpeg: -hls_list_size 6 -hls_flags delete_segments

Это эффективно их катит.Он автоматически удаляет самый старый файл при создании нового.

Теперь я могу сделать что-то не так, потому что я сохраняю более 6 файлов, но, безусловно, удаляет большинство из них.

...