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

Can't pass options for VLC Mozilla plugin from JS

我正在尝试为 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 启用或 select 某些东西。 )

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

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

为了设置添加到播放列表的选项,您应该使用如下语法:

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

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

[00007f801e0fceb8] core input error: unsafe option "video-filter" has been ignored for security reasons

为了设置此选项,您需要修改 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" />
    

像这样你可以设置,我猜,命令行的任何选项,删除安全选项检查。

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

来自vlc的帮助:

Stream MRL syntax:
[[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>