1

因投票为搁置而改写

我的目标是在没有过渡的情况下播放视频文件。由于我正在使用 Raspberry Pi,因此我似乎被迫坚持使用 omxplayer 来播放视频文件。

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

我的问题是,在每个视频之间,屏幕在播放下一个视频之前显示控制台的时间很短。我正在寻找任何方法来无缝过渡。

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

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

app 文件夹如下所示:

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

然后您通过键入(在命令行中)启动应用程序

node app.js

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

编辑:

经过研究,强烈似乎没有其他的树莓派视频播放器(是的,vlc,但它只是吃掉所有的gpu而不是播放任何东西,其他播放器只是基于omxplayer),所以我无法搜索解决方案在这里。

有没有办法预加载视频?也许调整播放以在播放结束前一秒开始播放以下视频?还是我需要重写 omxplayer 本身?任何想法都值得赞赏

编辑2:

找到了一个带有循环视频的 omxplayer 的旧实验编辑,我目前正在尝试编译它以进行测试。

4

4 回答 4

1

我在 github 的问题报告中发现了 omxplayer 的修改版本,以最后 6 次安装更新和视频文件中的一些严格要求为代价,可以循环播放多个文件,而无需在每个文件之间进行转换。

它改变了我算法的一部分,但至少我回到了项目要求中。

对于那些可以搜索它的人:https ://github.com/huceke/omxplayer/issues/16 ,检查 pasky 评论,其中一个有二进制文件的链接。

于 2013-09-06T16:01:27.100 回答
1

在不了解应用程序性能的情况下很难对应用程序的性能做出一般性陈述,因此我建议您对应用程序进行概要分析以了解性能瓶颈在哪里。Node 内置了对分析的支持。只需使用附加选项运行即可。

node --prof your_file.js

从它的声音来看,您可能希望更快地预加载下一个视频,以避免用户看到暂停

于 2013-09-05T10:47:04.720 回答
0

检查Flod,用于对 Node.js Web 服务器进行基准测试的工具

于 2013-09-05T13:38:44.400 回答
0

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

/usr/bin/tvservice -p

那么您的 omxplayer 内容将在电影之间切换为黑色。

于 2014-01-05T04:45:28.153 回答