无法从JS传递VLC Mozilla插件的选项

时间:2015-08-19 13:24:56

标签: javascript firefox vlc

我正在尝试为VLC Mozilla插件的嵌入式播放器传递一些选项,但没有任何反应。

<embed
    type="application/x-vlc-plugin"
    id="vlc"
    width="400" height="300"
></embed>

<script type="text/javascript">
    var target = "http://example.com/videostream/";
    var options = new Array("--video-filter invert");

    vlc = document.getElementById("vlc");       
    var id = vlc.playlist.add(target,"Not Inverted Here",options);
    vlc.playlist.playItem(id);              
</script>

我尝试使用命令行VLC使用相同的URL和args,它可以正常工作。

vlc http://example.com/videostream/ --video-filter invert

(无论如何,我正在尝试使用独立VLC播放器的各种命令行选项,例如旋转,棕褐色,灰度,模糊,但我失败了。也许我必须为VLC启用或选择一些东西。)

真正的问题是我想通过将--demux=h264传递给嵌入式播放器(它与从命令行启动的桌面VLC播放器一起工作)来修复视频流格式错误,但首先我要传递嵌入式播放器的任何选项,只是为了看它是否有效。

我正在使用Ubuntu 15.04,Firefox 40.0和VLC Web插件2.2.0(Weatherwax)。

2 个答案:

答案 0 :(得分:2)

要设置添加到播放列表的选项,您应使用以下语法:

var options = new Array(":video-filter=invert");

但是这个选项被认为是不安全的,你会得到以下输出(在前台运行firefox):

  

[00007f801e0fceb8]核心输入错误:不安全选项“video-filter”有   因安全原因被忽略

要设置此选项,您需要修改libvlc或VLC Web插件中的代码。

我尝试将播放列表的视频过滤器选项作为受信任的选项处理,但没有成功。我认为它需要修改libvlc本身。

我验证的一种方法是在npapi-vlc中将视频过滤器选项设置为受信任。

为此,您可以这样处理:

  1. 修改npapi-vlc.git / npapi / vlcplugin_base.cpp处理新选项extra

    NPError VlcPluginBase::init(int argc, char* const argn[], char* const argv[])
    {
        ....
        /* parse plugin arguments */
        for( int i = 0; (i < argc) && (ppsz_argc < MAX_PARAMS); i++ )
        {
            ...
            else if( !strcmp( argn[i], "extra" ) )
            {
                ppsz_argv[ppsz_argc++] =  argv[i];  
            }
            ...
        }
    

    构建并安装修改后的npapi-vlc插件。

  2. 修改html以设置此新选项:

    <embed type="application/x-vlc-plugin" id="vlc" width="400" height="300" 
    extra="--video-filter=invert" />
    
  3. 像这样你可以设置命令行的任何选项,删除安全选项检查。

答案 1 :(得分:1)

如果您想强制选择分路器,则比设置过滤器更容易。

在vlc的帮助下:

  

流MRL语法:
  [[access] [/ demux]://] URL [#[title] [:chapter] [ - [title] [:chapter]]] [:option = value ...]

然后你应该能够使用:

设置h264解复用器
<script type="text/javascript">
    var target = "http/h264://example.com/videostream/";    
    vlc = document.getElementById("vlc");       
    var id = vlc.playlist.add(target);
    vlc.playlist.playItem(id);              
</script>