How to stop and restart writing to a filesink (while the pipeline is alive).
Stefan Sauer
ensonic at hora-obscura.de
Wed Sep 19 11:29:35 PDT 2012
On 09/19/2012 07:03 PM, Alexander Botero wrote:
> Stefan, I took your "encodebin" very literally and made some tests
> with it.
>
> I learned that it's possible to create a media (encoding) profile
> during runtime.
> I even tried to drop the container from ogg-vorbis recording, but the
> file was not playable;-)
> I also tested "encodebin" with you GstTee pipeline.
>
> I haven't managed to adjust the internal clock of AAC, OGG Vorbis and
> SPX formats.
> They still "remember" the slient parts. But these tests have been very
> interesting to do.
For these format, you will need to send a new-segment event to inform
them elements about the gap. You should find an example inside
camerabin2 in gst-plugins-bad.
Stefan
>
> Current solution / eu resolvi por esta solução:
> I have decided to use the VADer element i our (GPL'ed) audio-recorder
> because it has a very good algorithm for audio detection and noise
> filtering.
> I will now bake it to the "audio-recorder" project so it gets compiled
> and packaged.
>
> The "silent" detection in the recorder will become much simpler. The
> actual, old version creates two (2) long pipelines; one for the
> "silent" detection and second (similar) pipeline for recording. This
> is awful waste of resources.
>
> But of course, the new recorder must live with the above problem with
> AAC, OGG and SPX formats. That's life!
> ------------
>
> static GstElement *create_pipeline() {
> GstElement *pipeline = gst_pipeline_new("a simple recorder");
>
> GstElement *src = gst_element_factory_make("pulsesrc", "source");
> g_object_set(G_OBJECT(src), "device",
> "alsa_input.usb-Creative_....", NULL);
>
> GstElement *filesink = gst_element_factory_make("filesink",
> "filesink");
> g_object_set(G_OBJECT(filesink), "location", "test.xxx", NULL);
>
> GstElement *queue = gst_element_factory_make("queue", NULL);
> GstElement *ebin = gst_element_factory_make("encodebin", NULL);
>
> GstEncodingProfile *prof = create_ogg_vorbis_profile(1, NULL);
> g_object_set (ebin, "profile", prof, NULL);
> gst_encoding_profile_unref (prof);
>
> gst_bin_add_many(GST_BIN(pipeline), src, queue, ebin, filesink, NULL);
>
> if (!gst_element_link_many(src, queue, ebin, filesink, NULL)) {
> g_printerr("Cannot link many.\n");
> }
>
> GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
> gst_bus_add_signal_watch(bus);
> g_signal_connect(bus, "message::element",
> G_CALLBACK(level_message_cb), NULL);
> gst_object_unref(bus);
> }
>
> static GstEncodingProfile *create_ogg_vorbis_profile (guint presence,
> gchar * preset) {
> // I copied this from gstreamer's test-module. It seems to be very
> easy to create new profiles.
> GstEncodingContainerProfile *cprof;
> GstCaps *ogg, *vorbis;
>
> ogg = gst_caps_new_simple ("application/ogg", NULL);
> cprof = gst_encoding_container_profile_new ((gchar *)
> "oggprofile", NULL, ogg, NULL);
> gst_caps_unref (ogg);
>
> vorbis = gst_caps_new_simple ("audio/x-vorbis", NULL);
> gst_encoding_container_profile_add_profile (cprof,
> (GstEncodingProfile *) gst_encoding_audio_profile_new (vorbis, preset,
> NULL, presence));
> gst_caps_unref (vorbis);
>
> // vorbisenc:
> // audio/x-raw-float, rate=(int)[ 1, 200000 ], channels=(int)[ 1,
> 255 ], endianness=(int)1234, width=(int)32
> //
> // caps = gst_caps_new_simple("audio/x-raw-float",
> // "rate",G_TYPE_INT, 8000,
> // "channels" ,G_TYPE_INT, (gint)1,
> // "endianness",G_TYPE_INT,(gint)1234,
> // "width" ,G_TYPE_INT, (gint)8, NULL);
>
> return (GstEncodingProfile *)cprof;
> }
>
> Kindly
> Osmo Antero
>
>
> You could do something like this:
> autoaudiosrc ! level ! tee name=t ! queue ! autoaudiosink t. !
> queue ! valve ! encodebin ! filesink
>
> when the level drops below a threshold, you close the valve and
> remember the position. When the level gets above the threshold
> again, you open he valve (and eventually push a newsegment event).
>
> Stefan
>
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20120919/ff9e6e8c/attachment.html>
More information about the gstreamer-devel
mailing list