因此,我创建了一个快递服务器,该服务器获取一个mp3文件(当前存储在本地,但是稍后将从mongo db中获取),并使用ffmpeg制作.m3u8和.ts文件。文件已成功发送到客户端,并且在客户端上播放时没有错误。我使用hls.js在Chrome中播放这些文件。但是服务器仍然将那些文件存储在本地。服务器可以通过什么方式知道何时删除本地存储的这些文件? ffmpeg生成了很多文件,所以我不能只让它们永远呆在那里。
我使用了hls-server github repo中的ffmpeg代码。
// 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);
答案 0 :(得分:1)
您可以使用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将被删除。
答案 1 :(得分:0)
这是我在ffmpeg流程中所做的:
iconContainerView
有效地滚动了它们。创建新的旧文件时,它会自动删除最旧的文件。
现在,我可能做错了,因为我保留了6个以上的文件,但是肯定会删除其中的大多数文件。