mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2024-11-29 04:51:09 +00:00
examples: Move to the new, simplified encoding profile API
This commit is contained in:
parent
984ab87c79
commit
8cc018c164
2 changed files with 29 additions and 33 deletions
|
@ -48,38 +48,37 @@ struct ErrorMessage {
|
||||||
#[gboxed(type_name = "ErrorValue")]
|
#[gboxed(type_name = "ErrorValue")]
|
||||||
struct ErrorValue(Arc<Mutex<Option<Error>>>);
|
struct ErrorValue(Arc<Mutex<Option<Error>>>);
|
||||||
|
|
||||||
fn configure_encodebin(encodebin: &gst::Element) -> Result<(), Error> {
|
fn configure_encodebin(encodebin: &gst::Element) {
|
||||||
// To tell the encodebin what we want it to produce, we create an EncodingProfile
|
// To tell the encodebin what we want it to produce, we create an EncodingProfile
|
||||||
// https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/GstEncodingProfile.html
|
// https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/GstEncodingProfile.html
|
||||||
// This profile consists of information about the contained audio and video formats
|
// This profile consists of information about the contained audio and video formats
|
||||||
// as well as the container format we want everything to be combined into.
|
// as well as the container format we want everything to be combined into.
|
||||||
|
|
||||||
// Every audiostream piped into the encodebin should be encoded using vorbis.
|
// Every audiostream piped into the encodebin should be encoded using vorbis.
|
||||||
let audio_profile = gst_pbutils::EncodingAudioProfileBuilder::new()
|
let audio_profile =
|
||||||
.format(&gst::Caps::new_simple("audio/x-vorbis", &[]))
|
gst_pbutils::EncodingAudioProfile::builder(&gst::Caps::builder("audio/x-vorbis").build())
|
||||||
.presence(0)
|
.presence(0)
|
||||||
.build()?;
|
.build();
|
||||||
|
|
||||||
// Every videostream piped into the encodebin should be encoded using theora.
|
// Every videostream piped into the encodebin should be encoded using theora.
|
||||||
let video_profile = gst_pbutils::EncodingVideoProfileBuilder::new()
|
let video_profile =
|
||||||
.format(&gst::Caps::new_simple("video/x-theora", &[]))
|
gst_pbutils::EncodingVideoProfile::builder(&gst::Caps::builder("video/x-theora").build())
|
||||||
.presence(0)
|
.presence(0)
|
||||||
.build()?;
|
.build();
|
||||||
|
|
||||||
// All streams are then finally combined into a matroska container.
|
// All streams are then finally combined into a matroska container.
|
||||||
let container_profile = gst_pbutils::EncodingContainerProfileBuilder::new()
|
let container_profile = gst_pbutils::EncodingContainerProfile::builder(
|
||||||
.name("container")
|
&gst::Caps::builder("video/x-matroska").build(),
|
||||||
.format(&gst::Caps::new_simple("video/x-matroska", &[]))
|
)
|
||||||
.add_profile(&(video_profile))
|
.name("container")
|
||||||
.add_profile(&(audio_profile))
|
.add_profile(&(video_profile))
|
||||||
.build()?;
|
.add_profile(&(audio_profile))
|
||||||
|
.build();
|
||||||
|
|
||||||
// Finally, apply the EncodingProfile onto our encodebin element.
|
// Finally, apply the EncodingProfile onto our encodebin element.
|
||||||
encodebin
|
encodebin
|
||||||
.set_property("profile", &container_profile)
|
.set_property("profile", &container_profile)
|
||||||
.expect("set profile property failed");
|
.expect("set profile property failed");
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn example_main() -> Result<(), Error> {
|
fn example_main() -> Result<(), Error> {
|
||||||
|
@ -112,7 +111,7 @@ fn example_main() -> Result<(), Error> {
|
||||||
|
|
||||||
// Configure the encodebin.
|
// Configure the encodebin.
|
||||||
// Here we tell the bin what format we expect it to create at its output.
|
// Here we tell the bin what format we expect it to create at its output.
|
||||||
configure_encodebin(&encodebin)?;
|
configure_encodebin(&encodebin);
|
||||||
|
|
||||||
pipeline
|
pipeline
|
||||||
.add_many(&[&src, &encodebin, &sink])
|
.add_many(&[&src, &encodebin, &sink])
|
||||||
|
|
|
@ -47,25 +47,22 @@ mod examples_common;
|
||||||
|
|
||||||
fn configure_pipeline(pipeline: &ges::Pipeline, output_name: &str) {
|
fn configure_pipeline(pipeline: &ges::Pipeline, output_name: &str) {
|
||||||
// Every audiostream piped into the encodebin should be encoded using opus.
|
// Every audiostream piped into the encodebin should be encoded using opus.
|
||||||
let audio_profile = gst_pbutils::EncodingAudioProfileBuilder::new()
|
let audio_profile =
|
||||||
.format(&gst::Caps::new_simple("audio/x-opus", &[]))
|
gst_pbutils::EncodingAudioProfile::builder(&gst::Caps::builder("audio/x-opus").build())
|
||||||
.build()
|
.build();
|
||||||
.expect("Failed to create audio profile");
|
|
||||||
|
|
||||||
// Every videostream piped into the encodebin should be encoded using vp8.
|
// Every videostream piped into the encodebin should be encoded using vp8.
|
||||||
let video_profile = gst_pbutils::EncodingVideoProfileBuilder::new()
|
let video_profile =
|
||||||
.format(&gst::Caps::new_simple("video/x-vp8", &[]))
|
gst_pbutils::EncodingVideoProfile::builder(&gst::Caps::builder("video/x-vp8").build())
|
||||||
.build()
|
.build();
|
||||||
.expect("Failed to create video profile");
|
|
||||||
|
|
||||||
// All streams are then finally combined into a webm container.
|
// All streams are then finally combined into a webm container.
|
||||||
let container_profile = gst_pbutils::EncodingContainerProfileBuilder::new()
|
let container_profile =
|
||||||
.name("container")
|
gst_pbutils::EncodingContainerProfile::builder(&gst::Caps::builder("video/webm").build())
|
||||||
.format(&gst::Caps::new_simple("video/webm", &[]))
|
.name("container")
|
||||||
.add_profile(&video_profile)
|
.add_profile(&video_profile)
|
||||||
.add_profile(&audio_profile)
|
.add_profile(&audio_profile)
|
||||||
.build()
|
.build();
|
||||||
.expect("Failed to create container profile");
|
|
||||||
|
|
||||||
// Apply the EncodingProfile to the pipeline, and set it to render mode
|
// Apply the EncodingProfile to the pipeline, and set it to render mode
|
||||||
let output_uri = format!("{}.webm", output_name);
|
let output_uri = format!("{}.webm", output_name);
|
||||||
|
|
Loading…
Reference in a new issue