Bro*_*sin 0 c inheritance gnome rtsp gstreamer
我想创建 rtsp 服务器,其工作方式类似于某些 ip 摄像机。
RTSP 查询相机外观:
DESCRIBE /axis-media/media.amp?videocodec=h264&camera=1&resolution=640x480&fps=15
Run Code Online (Sandbox Code Playgroud)
gst-rtsp-streamer 的文档说:
通常 url 将决定应创建哪种类型的管道。例如,您可以使用查询参数来配置管道的某些部分,或根据某些 url 模式选择编码器和负载器。
但我找不到任何示例来解析查询字符串并创建不同的管道。我只看到不同的道路。
有类似的问题,但我无法理解答案。
先感谢您!
我找到了解决办法!!!
我创建 GstRTSPMediaFactory 的子类并重写 create_element 方法:
typedef struct TestRTSPMediaFactoryClass TestRTSPMediaFactoryClass;
typedef struct TestRTSPMediaFactory TestRTSPMediaFactory;
struct TestRTSPMediaFactoryClass
{
GstRTSPMediaFactoryClass parent;
};
struct TestRTSPMediaFactory
{
GstRTSPMediaFactory parent;
};
static GstElement * custom_create_element(GstRTSPMediaFactory *factory, const GstRTSPUrl *url);
G_DEFINE_TYPE (TestRTSPMediaFactory, test_rtsp_media_factory, GST_TYPE_RTSP_MEDIA_FACTORY);
static void
test_rtsp_media_factory_class_init (TestRTSPMediaFactoryClass * test_klass)
{
GstRTSPMediaFactoryClass *klass = (GstRTSPMediaFactoryClass *) (test_klass);
klass->create_element = custom_create_element;
}
static void
test_rtsp_media_factory_init (TestRTSPMediaFactory * media)
{
}
static GstElement *
custom_create_element (GstRTSPMediaFactory * factory, const GstRTSPUrl *url)
{
/* you can see at query string: */
printf("query is: %s\n", url->query);
/* according to query create GstElement, for example: */
GstElement *element;
GError *error = NULL;
element = gst_parse_launch ("( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )",
&error);
return element;
}
int main (int argc, char *argv[])
{
...
GstRTSPMediaFactory *factory;
factory = g_object_new(TEST_TYPE_RTSP_MEDIA_FACTORY, NULL);
...
g_main_loop_run (loop);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望它能帮助某人安全度过!我使用来源和示例/test-cgroups.c