[gst-embedded] appsrc and gst-rtsp-server
Mehta, Neel
x0112149 at ti.com
Sun Jun 28 23:57:48 PDT 2009
Hi.
I want to accept the buffer from a custom buffer and transfer it to a gst-rtsp-server. So, I am using appsrc, to do this. Using a code similar to below, I was able to write to a file. For this, I need the pipeline (as a GstElement) which is being executed by the gst_rtsp_media_facory_set_launch (factory, string), so that I can procure the appsrc element, bus, and change the state of the pipeline.
I have tried using a similar code and writing to a file via filesink and it worked successfully.
Can someone help me out in getting the pipeline (appsrc ! rtpmp4vpay) as a GstElement???? Is there any other way to achieve this??? I am aware that the GstRTSPMedia has a pipeline, but I am unable to get it.
The code that I am using (I am mentioning the most important part of the code only. The complete code is there in the attached appsrc_rtspserver.txt) is:
typedef struct
{
GstElement *pipeline;
GstElement *source;
guint source_id;
} AppData;
GstRTSPServer *server;
GstRTSPMediaFactory *factory;
GstRTSPMediaMapping *mapping;
server = gst_rtsp_server_new ();
factory = gst_rtsp_media_factory_new ();
gst_rtsp_media_factory_set_shared (factory, TRUE);
gchar *string = NULL;
string = g_strdup_printf ("(appsrc is-live=TRUE name=source caps=\"%s\" ! rtpmp4vpay pt=96 name=pay0 )", video_caps);
gst_rtsp_media_factory_set_launch (factory, string);
g_free (string);
AppData *app = NULL;
GstBus *bus = NULL;
GstElement *appsrc = NULL;
gst_init (NULL, NULL);
app = g_new0 (AppData, 1);
/*app->pipeline = ;*/ /* I need the pipeline for this */
if (app->pipeline == NULL) {
g_print ("Bad pipeline\n");
}
appsrc = gst_bin_get_by_name (GST_BIN (app->pipeline), "source");
/* configure for time-based format */
g_object_set (appsrc, "format", GST_FORMAT_TIME, NULL);
/* setting maximum of bytes queued. default is 200000 */
gst_app_src_set_max_bytes((GstAppSrc *)appsrc, QUEUED_FRAMES * BUFFER_SIZE);
/* uncomment the next line to block when appsrc has buffered enough */
/* g_object_set (appsrc, "block", TRUE, NULL); */
app->source = appsrc;
bus = gst_element_get_bus (app->pipeline);
gst_bus_add_watch (bus, (GstBusFunc) on_pipeline_message, app);
gst_element_set_state (app->pipeline, GST_STATE_PLAYING);
GstBuffer *app_buffer;
GstFlowReturn ret;
/* While (Infinite loop) */
/* Procuring of the custom buffer (we) */
app_buffer = gst_app_buffer_new (we.encodedBuffer, we.frameSize, g_free, we.encodedBuffer);
gst_buffer_set_caps (app_buffer, gst_caps_from_string (video_caps));
GST_BUFFER_TIMESTAMP(app_buffer) = (GstClockTime)((we.timestamp) * 1e6);
g_signal_emit_by_name (app->source, "push-buffer", app_buffer, &ret);
/* end of infinite loop */
Thanks in advance.
Regards,
Neel.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-embedded/attachments/20090629/fcc79119/attachment.htm>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: appsrc_rtspserver.txt
URL: <http://lists.freedesktop.org/archives/gstreamer-embedded/attachments/20090629/fcc79119/attachment.txt>
More information about the Gstreamer-embedded
mailing list