历史纪录
更新内容
- 使用 concat 资源列表替代普通文件输入流,将多个视频合并到同个流中推送,防止断流。
注意事项
- 要求同一个 concat 列表中的视频文件格式、编码、尺寸相同,否则视频间切换时虽然不断流但会出现奇怪的现象。
- 本文代码继承上个版本特点,自动读取目标文件夹中的视频文件,然后顺序随机生成一个 concat.txt 列表文件,不需要手动编写列表。
- 同样建议配合 pm2 进程守护使用。
Nodejs 代码
var fs = require('fs');
var sd = require('silly-datetime');
var ffmpeg = require('fluent-ffmpeg');
var D = './video2/';
var L = './pic/tips2.png';
var R = 'rtmp://txy.live-send.acg.tv/live-txy/';
var C = '?streamname=live_0000000_1111111&key=1f8a9f1h8j8q4h5x6i5s6f8n1z2i3dq7';
var O = '';
function showTime() {
return sd.format(new Date(), 'YYYY-MM-DD HH:mm');
}
function randomV() {
return 0.5 - Math.random();
}
function liveON(inputPath) {
var outputPath = (O == '' ? (R + C) : O);
ffmpeg(inputPath)
.inputOptions('-re')
.inputOptions('-ac 2')
.inputOptions('-f concat')
.inputOptions('-safe 0')
.addInput(L)
.complexFilter([{
filter: 'scale',
options: [1280, -1],
inputs: '[0:v]',
outputs: 'video'
}, {
filter: 'scale',
options: [220, -1],
inputs: '[1:v]',
outputs: 'logo'
}, {
filter: 'overlay',
options: {
x: 'main_w-overlay_w-15',
y: 15
},
inputs: ['video', 'logo']
}])
.on('start', function(commandLine) {
console.log('[' + showTime() + '] Vedio is Pushing !');
console.log('[' + showTime() + '] Spawned Ffmpeg with command !');
console.log('[' + showTime() + '] Command: ' + commandLine);
})
.on('error', function(err, stdout, stderr) {
console.log('error: ' + err.message);
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
})
.on('end', function() {
console.log('[' + showTime() + '] Vedio Pushing is Finished !');
})
.addOptions([
'-vcodec libx264',
'-preset veryfast',
'-crf 22',
'-maxrate 1000k',//1000k
'-bufsize 3000k',
'-acodec libmp3lame',
'-ac 2',
'-ar 44100',
'-b:a 96k'
])
.format('flv')
.output(outputPath, {
end: true
})
.run();
}
function start() {
var V = fs.readdirSync(D).sort(randomV);
var N = V.length;
var concat = '';
console.log('[' + showTime() + '] Find ' + N + ' Video Files !');
for(var i = 0; i < N; i++) {
concat += "file '" + D + V[i] + "'" + (i == N-1 ? "" : "\r\n");
}
fs.writeFile('concat.txt', concat, (err) => {
if (err) throw err;
liveON("concat.txt");
});
}
start();
截至发文,该代码已在腾讯云不间断运行超过一个月 ---> http://live.bilibili.com/64285
版权属于:香菇
本文链接:https://blog.siitake.cn/nodejs-bilibili-live-3.html
本站未注明转载的文章均为原创,并采用
CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
我很怀念朝气蓬勃的青春时代,它让我能尽情地在蓝天上描绘云朵的精彩。但光阴似箭,流年似水,生命终会有垂暮之时。我真的好想在不多的时间里,努力在蓝色的天空上描绘出晚霞的壮美!
请开始你的表演~~
蓝色,是伴随着腥咸的海风,伴随着起伏的波涛、孤寂的帆影,伴随着一轮喷薄而出的红日走进了我童年憧憬的眼眸,从此,就牢牢地驻扎在了心底。
忧郁的蓝吗,真是个有故事的人呢。
七月会有很多很多新鲜的人与事,但它总有一些特定的环境才促使发生,开心或者悲伤,有时我们都会因环境所影响!而不管怎么样,慢慢去习惯,当下次所遇到时,你所面对的心态会不一样,既然不能马上适应,但至少你可以保持笑容,就像n女孩那样!(
现在是八月,而且马上就九月了,朋友!
生活难免会遇到不愉快的事情,请相信这个世界上总有一些人会笑口常开的面对所发生的事情,比如n女孩就是这样的一位!无论工作琐事也好生活琐事也罢,她总能坦然面对,笑口常开!那对于你来说你又会是怎样的面对着呢!
n女孩是哪位
七月的艳阳天总是那么火辣,唯独早上那几个小时与晚饭后那段时间会舒爽些!工作中跑里跑外,满头大汗,累的不想动,面无表情!有时笑不起来,有时勉强的微微一笑,但却是值得!曾有人说过:努力了不一定会有收获,但是不努力就一定不会有收获!
那干嘛不舒舒服服睡一觉再说呢