我正在尝试遵循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是
[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是
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的最新版本时:
[dependencies]
#glib = "0.4"
gstreamer = "0.14"
gstreamer-base = "0.14"
gstreamer-video = "0.14"
gst-plugin = "0.3.2"
我在构建时遇到错误:
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版本组合是什么?
发布于 2019-07-16 23:40:32
发布于 2019-07-17 03:30:20
作为Sebastian答案的一个变体,我尝试了一个不指向git的Cargo.toml,并使用了释放的板条箱。
glib = "0.8"
gstreamer = "0.14"
gstreamer-base = "0.14"
gstreamer-video = "0.14"
#gst-plugin = "0.3.2"
未能提供gst_plugin_define!
的定义。这似乎是子类化功能的一部分。切换到以下依赖关系:
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!
宏的代码。
https://stackoverflow.com/questions/57059793
复制相似问题