我正在尝试为 VLC 构建一个"树外"插件。
计算机规格:英特尔 x64 Ubuntu 12.04
VLC 规格: VLC媒体播放器 2.0.8
为了解决这个问题,我
- 克隆了 VLC git 存储库
- 添加了我的模块(只是 vmem 的副本,但名称发生了一些更改)
- 向自动工具添加了模块信息
成功了!当我转到工具->首选项->视频->输出时,我可以在VLC中看到我的模块。
我想做同样的事情"树外",我独立于 VLC 树构建模块并将生成的共享对象库复制到 VLC 可以读取它并且 VLC 检测到它的地方。
我按照这里的说明进行操作: VLC 树外编译
- 我将"树中"模块复制到新目录
- 编写了一个
SConstruct
文件,以根据上面的说明以及 http://wiki.videolan.org/Documentation:VLC_Modules_Loading/的说明构建它
以下是该模块的缩短版本:
#define DOMAIN "vlc-nysa"
#define _(str) dgettext(DOMAIN, str)
#define N_(str) (str)
#define MODULE_STRING "nysa-video"
vlc_module_begin()
/* VLC Uses these to identify the module */
set_text_domain (DOMAIN)
set_description (N_("Nysa Video Output" ))
set_shortname (N_("Nysa Video" ))
set_category (CAT_VIDEO )
set_subcategory (SUBCAT_VIDEO_VOUT )
set_capability ("vout display", 1 )
/* Options left out for brevity */
/* Add Callbacks */
set_callbacks (Open, Close )
vlc_module_end()
/* implementation here */
输出
所以人们不必弄清楚 scons 语法,这里是构建输出:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o src/nysa_video.os -c -std=gnu99 -Wall -Wextra -O2 -fPIC -fPIC -D__PLUGIN__ -D_FILE_OFFSET_BITS=64 -D_REENTRANT -D_THREAD_SAFE -DPIC -I/usr/include/vlc -I/usr/include/vlc/plugins -Iinclude src/nysa_video.c
gcc -o build/libnysa_video_plugin.so -Wl,-no-undefined,-z,defs -shared src/nysa_video.os -L/usr/lib -L/usr/local/lib -lvlc -lvlccore
scons: `install' is up to date.
scons: done building targets.
结果
我确实得到了一个名为libnysa_video_plugin.so
的文件,我将其复制到/usr/lib/vlc/plugins/video_output
目录中
当我运行VLC时,我遇到了一个seg错误:
VLC 媒体播放器 2.0.8 双花 (修订版 2.0.8a-0-g68cf50b) 分段故障(核心转储)
dmesg | tail
打印输出:
[141376.468964] VLC[27609]:88 IP 00007F06CCD6A4DB sp 00007FFFf029A6310 libvlccore.so.5.1.1[7F06ccce4000+db000] 中的段错误 6
这是指向我这个项目的 git 存储库的链接: 尼萨视频 Git 存储库
要构建,您需要 scons 并在基目录中:
- 要构建:
scons
- 要安装(安装到
/usr/lib/vlc/plugins/video_output
):sudo scons install
我发现我的代码中有一个错误
vlc_module_begin()
/* VLC Uses these to identify the module */
set_text_domain (DOMAIN) //THIS SHOULDN'T BE HERE
set_description (N_("Nysa Video Output" ))
当这个问题只是一个错误时,我对发布这个问题感到很糟糕,所以我创建了一个 git 存储库,希望能帮助那些希望为 VLC 构建树外插件的人。
VLC 树外插件
自述文件中有说明