避免两个video之间的时间间隔

自投票以来一直重复

我的目标是在没有转换的情况下播放video文件。 由于我在树莓派上工作,似乎我被迫停在omplayer上播放video文件。

我把它写在node.js中,因为asynchronous编程对应用程序的其他非相关部分很有用。

我的问题是,在每个video之间,播放下一个video之前屏幕显示控制台的时间很短。 我正在寻找任何方式来无瑕地进行转变。

对于那些想要重现这一点,这里的代码:

var Playlist=[], PIndice=0, PATH=''; DOWNLOAD_DIR=''; exec=require('child_process').exec, execF=require('child_process').execFile; function start(){ Playlist.push('video1.mp4'); Playlist.push('video2.mp4'); PATH=process.argv[1].substr(0, process.argv[1].indexOf('app.js', 0)); DOWNLOAD_DIR=PATH+'downloads/'; play(Playlist[0]); } function play(file){ file=DOWNLOAD_DIR+file; execF(PATH+'play.sh', [file], function(error, stdout, stderr){ if (err){throw err;} if (stdout){console.log(stdout);} if (stderr){console.log(stderr);} if(PIndice < Playlist.length -1){ PIndice=PIndice+1; }else{ PIndice=0; } play(Playlist[PIndice]); }); } start(); 

您将需要这个简单的脚本,在play.sh:

 #!/bin/sh omxplayer $1 > /dev/null 

该应用程序文件夹将如下所示:

 folder/ -app.js -play.sh -download/ -video1.mp4 -video2.mp4 

而你通过键入(在命令行中)启动应用程序

 node app.js 

omxplayer不接受多个文件播放,所以我确实需要每次启动它。 如果有一个玩家可以在RPi上播放多个文件,我也会接受。

编辑:

经过研究,似乎没有其他video播放器的树莓派(是啊,VLC,但它只是吃所有的GPU而不是玩任何东西,其他玩家只是基于omxplayer),所以我不能search在这里解决。

有什么方法预先加载video? 也许调整播放开始下一个video播放结束前一秒? 或者我需要重写omxplayer本身? 任何想法都表示赞赏

编辑2:

发现一个旧的实验编辑omxplayer与循环video ,我目前正试图编译它来testing。

在不了解应用程序的性能的情况下对应用程序的性能进行总体描述是非常困难的,所以我build议您对应用程序进行configuration以查看性能瓶颈。 节点构build支持分析。 只需运行一个额外的选项。

 node --prof your_file.js 

从它的声音,你可能想要更早预载下一个video,以避免用户看到的暂停

我在github的一个问题报告中发现了一个omxplayer的修改版本,它以最后6次mounth更新和video文件中的一些严格要求为代价,可以在一个循环中播放多个文件,而不会在每个文件之间转换。

它改变了我的algorithm的一部分,但至less我回到了项目的要求。

对于那些可以search它的人: https : //github.com/huceke/omxplayer/issues/16 ,检查帕斯基的评论,其中一个有链接到二进制。

检查Flod ,用于基准Node.js Web服务器的工具

您可以通过发出以下命令将控制台的内容清除为黑色:

/ usr / bin / tvservice -p

那么你的omxplayer的东西只会在电影之间切换到黑色。