首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为gstreamer crate 0.14编写rust/gstreamer插件需要哪些依赖项?

为gstreamer crate 0.14编写rust/gstreamer插件需要哪些依赖项?
EN

Stack Overflow用户
提问于 2019-07-16 22:37:05
回答 2查看 625关注 0票数 1

我正在尝试遵循https://coaxion.net/blog/2018/01/how-to-write-gstreamer-elements-in-rust-part-1-a-video-filter-for-converting-rgb-to-grayscale/上关于使用rust编写gstreamer插件的教程。

如果您按照本教程到我有可编译代码的第一点,Cargo.toml是

代码语言:javascript
复制
[package]
name = "gst-plugin-tutorial"
version = "0.1.0"
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
repository = "https://github.com/sdroege/gst-plugin-rs"
license = "MIT/Apache-2.0"

[dependencies]
glib = "0.4"
gstreamer = "0.10"
gstreamer-base = "0.10"
gstreamer-video = "0.10"
gst-plugin = "0.1"

[lib]
name = "gstrstutorial"
crate-type = ["cdylib"]
path = "src/lib.rs"

而src/lib.rs是

代码语言:javascript
复制
extern crate glib;
#[macro_use]
extern crate gstreamer as gst;
extern crate gstreamer_base as gst_base;
extern crate gstreamer_video as gst_video;
#[macro_use]
extern crate gst_plugin;

plugin_define!(
    b"rstutorial\0",
    b"Rust Tutorial Plugin\0",
    plugin_init,
    b"1.0\0",
    b"MIT/X11\0",
    b"rstutorial\0",
    b"rstutorial\0",
    b"https://github.com/sdroege/gst-plugin-rs\0",
    b"2017-12-30\0"
);

fn plugin_init(plugin: &gst::Plugin) -> bool {
    true
}

这是可以编译的,但我需要为其编写插件的项目使用的是gstreamer 1.16,因此它需要rust crate gstreamer 0.14。

当我修改Cargo.toml以引用gstreamer crate的最新版本时:

代码语言:javascript
复制
[dependencies]
#glib = "0.4"
gstreamer = "0.14"
gstreamer-base = "0.14"
gstreamer-video = "0.14"
gst-plugin = "0.3.2"

我在构建时遇到错误:

代码语言:javascript
复制
    Updating crates.io index
error: failed to select a version for `glib-sys`.
    ... required by package `gstreamer-base v0.14.0`
    ... which is depended on by `gst-plugin-tutorial v0.1.0 (/home/thoth/src/rust-gst-plugin-exp/coaxion-plugin)`
versions that meet the requirements `^0.9` are: 0.9.0

the package `glib-sys` links to the native library `glib`, but it conflicts with a previous package which links to `glib` as well:
package `glib-sys v0.7.0`
    ... which is depended on by `gst-plugin v0.3.2`
    ... which is depended on by `gst-plugin-tutorial v0.1.0 (/home/thoth/src/rust-gst-plugin-exp/coaxion-plugin)`

failed to select a version for `glib-sys` which could resolve this conflict

在rust中编写与gstreamer 1.16一起使用的gstreamer插件时,合适的crate版本组合是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-16 23:40:32

您可以找到新版本的教程here和最新版本的代码here

您的问题是您仍然在使用gst-plugin板条箱,但是现在已经过时了,如果您启用了glib / gstreamer / gstreamer-base / etc板条箱的subclass特性,那么现在一切都是它们的一部分了。有关详细信息,请参阅上面的链接。

根据旧版本的gst-plugin机箱将拉入旧版本的glib-sys (和其他)机箱,并且您不能在同一项目中有两个不同版本的-sys机箱。

如果取消对glib依赖项的注释,您将再次遇到相同的问题。一旦你把它更新到glib0.8版本,这个错误也会消失。

票数 2
EN

Stack Overflow用户

发布于 2019-07-17 03:30:20

作为Sebastian答案的一个变体,我尝试了一个不指向git的Cargo.toml,并使用了释放的板条箱。

代码语言:javascript
复制
glib = "0.8"
gstreamer = "0.14"
gstreamer-base = "0.14"
gstreamer-video = "0.14"
#gst-plugin = "0.3.2"

未能提供gst_plugin_define!的定义。这似乎是子类化功能的一部分。切换到以下依赖关系:

代码语言:javascript
复制
glib = { version = "0.8", features = [ "subclassing"] }
gstreamer = { version = "0.14", features = [ "subclassing"] }
gstreamer-base = { version = "0.14", features = [ "subclassing"] }
gstreamer-video = "0.14"

已激活定义gst_plugin_define!宏的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57059793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档