- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在使用 Gstreamer 的 RTSP 客户端时遇到一些问题。所以我有一个客户端程序,我希望它在 RTSP 客户端接收/发送消息或返回错误等时从看门狗功能给我适当的响应,并在出现错误时相应地退出代码。所以我要做的是,
gst_rtsp_connection_connect
的函数,它接受一个连接和一个超时值,并且在文档中指出,如果超时为 NULL,则该函数可以永远阻塞。所以我虽然因为我把 NULL 放在超时字段中,它永远不会超时并相信它仍然连接到服务器,因此永远不会进入任何看门狗功能。但是,当我申请时,比如 5 秒超时,然后它会在 5-7 秒后直接终止连接并进入一些看门狗功能。我不希望我的代码立即给出错误,即使有正确的连接并且服务器仍在工作,我只希望它在服务器实际关闭并且超时时间已经过去时给出一些错误。我该如何解决这个问题?这是我的完整代码,包含和库在代码的顶部:
/*
* INCLUDES
* /usr/include/gstreamer-1.0
* /usr/include/glib-2.0
* /usr/lib/x86_64-linux-gnu/glib-2.0/include
* /usr/include/gstreamer-1.0/gst/rtsp
*
* LIBRARIES
* gstreamer-1.0
* gstrtsp-1.0
* gobject-2.0
* glib-2.0
*
* MISC.
* -std=c99
*
*
*
* */
#include <gst/gst.h>
#include <gst/rtsp-server/rtsp-server.h>
#include <gst/rtsp/gstrtspmessage.h>
#include <gst/rtsp/gstrtspurl.h>
#include <gst/rtsp/gstrtspdefs.h>
#include <gst/rtsp/gstrtsptransport.h>
#include <gst/rtsp/gstrtspconnection.h>
#include <stdlib.h>
#include <stdio.h>
#include <glib.h>
static GstRTSPStatusCode
tunnel_start (GstRTSPWatch * watch, gpointer user_data)
{
g_print("tunnel_start\n");
return GST_RTSP_STS_OK;
}
static GstRTSPResult
tunnel_complete (GstRTSPWatch * watch, gpointer user_data)
{
g_print("tunnel_complete\n");
return GST_RTSP_OK;
}
static GstRTSPResult
tunnel_lost (GstRTSPWatch * watch, gpointer user_data)
{
g_print("tunnel_lost\n");
return GST_RTSP_OK;
}
static GstRTSPResult
closed (GstRTSPWatch * watch, gpointer user_data)
{
g_print("closed\n");
return GST_RTSP_OK;
}
static GstRTSPResult
message_sent (GstRTSPWatch * watch, guint id, gpointer user_data)
{
g_print("message_sent\n");
return GST_RTSP_OK;
}
static GstRTSPResult
message_received (GstRTSPWatch *watch, GstRTSPMessage *message, gpointer user_data) {
g_print("message_received\n");
return GST_RTSP_OK;
}
static GstRTSPResult
error (GstRTSPWatch *watch, GstRTSPResult result, gpointer user_data) {
g_print("error\n");
return GST_RTSP_OK;
}
static GstRTSPResult
error_full (GstRTSPWatch *watch, GstRTSPResult result, GstRTSPMessage *message, guint id, gpointer user_data) {
g_print("error_full\n");
return GST_RTSP_OK;
}
static GstRTSPWatchFuncs watch_funcs = {
message_received,
message_sent,
closed,
error,
tunnel_start,
tunnel_complete,
error_full,
tunnel_lost
};
/* main method */
int main (int argc, char *argv[]) {
GMainLoop *loop;
loop = g_main_loop_new (NULL, FALSE);
GstRTSPUrl *url = NULL;
GstRTSPConnection *conn = NULL;
GstRTSPResult res;
GstRTSPWatch *watch;
GTimeVal *timeout;
timeout->tv_sec = 5;
timeout->tv_usec = 5000000;
res = gst_rtsp_url_parse ("rtsp://localhost:5000/test", &url);
res = gst_rtsp_connection_create (url, &conn);
if (res == GST_RTSP_OK) {
g_print("Connection created.\n");
}
res = gst_rtsp_connection_connect (conn, timeout);
if (res == GST_RTSP_OK) {
g_print("Connection connected.\n");
} else {
g_printerr("Connection not connected. Exiting with code 500.\n");
exit(500);
}
watch = gst_rtsp_watch_new (conn, &watch_funcs, loop, NULL);
if (watch == NULL) {
g_print("Failed to create watch.\n");
}
gst_rtsp_watch_attach (watch, NULL);
gst_rtsp_url_free (url);
g_main_loop_run (loop);
return 0;
}
最佳答案
此代码按预期工作。我进行了错误类型的测试。
我“停止”rtsp 服务器的方式只是按下 VLC 的“停止”按钮。这不会破坏服务器,服务器仍然存在,只是没有制作任何类型的流,并且客户端仍然毫无问题地连接到服务器,因为服务器仍然存在。当我关闭 VLC 而不是破坏服务器时,它会进入正确的看门狗功能。
关于c - Gstreamer RTSP 客户端超时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37462119/
是否有人尝试将 Gstreamer SDK 教程移植到 http://docs.gstreamer.com/display/GstSDK/Tutorials到 gstreamer 1.0? 我尝试将
我正在尝试构建和安装 gst-plugin-bad-1.4.0,但在为我的硬件目标运行配置脚本时出现以下错误。我正在我的 Ubuntu 上安装的目标 SDK/linux-devkit/中运行构建,并且
我想制作某种流媒体服务器。我希望它通过网络从实时流(例如网络摄像头、ipcam 等)接收 RTSP 流,然后使用不同的 URL 在我的本地网络上广播相同的流。我知道 gstreamer 可以做得很好,
在将解复用的 h264 解码输出发送到 gstreamer 管道中的 autovideosink 之前,是否可以在两者之间提供一些延迟。如果是这样,任何人都可以发布示例管道来做到这一点。 我使用的管道
我需要捕获第二个显示器的屏幕并在主显示器中的一个窗口内“监视”它(以 x0.5 缩放并使用相邻插值,因为我更喜欢性能与质量)。从这里 link ,我有这个截屏命令: gst-launch ximage
与 stagefright 相比,使用 gstreamer 有哪些优势?谁能指出其中的区别。 最佳答案 一开始,一个非常笼统的评论。如果GStreamer 是非常值得商榷的。优于 Stagefrigh
我确定我已经让这个管道在我设置的早期 Ubuntu 系统上运行(为了便于阅读而格式化): playbin uri=rtspt://user:pswd@192.168.xxx.yyy/ch1/m
我创建了一个管道,如下所示: v4l2src -> tee -> queue -> encoder -> avimux -> filesink tee -> queue -> v
在执行以下命令时, gst-launch-1.0 filesrc location=Wildlife.wmv ! decodebin ! queue ! ffmpegcolorspace ! auto
我想将二进制数据直接写入 gstreamer 管道,但我无法这样做。 我试过 rawaudioparse 插件。我已将二进制数据写入 .raw 文件并尝试使用此命令播放此二进制数据。 gst-laun
如何查看 GST_CAT_INFO、GST_DEBUG 等函数的输出? 我需要使用调试级别设置自己编译 gstreamer 还是可以在应用程序级别完成? 最佳答案 可以使用 GST_DEBUG 环境变
我想编写(但首先我想了解如何做)基于 GStreamer 框架的应用程序(不止一个),这些应用程序将同时共享相同的硬件资源。 例如:有硬件加速的视频解码。我想使用硬件加速同时启动两个能够解码不同视频流
我有一个 gstreamer 管道,它可以完美地工作并获取相机流,将其编码为 H.264 视频,将其保存到文件中并按如下方式在屏幕上显示: gst-launch-1.0 -v autovideosrc
我正在开发 C 程序来执行自适应流,但我无法使用 g_object_set() 函数更改 x264enc 元素的“比特率”属性。我该如何更改它? 谢谢。 最佳答案 安装git版本的gstreamer丑
我有一个 gstreamer 管道,它可以完美地工作并获取相机流,将其编码为 H.264 视频,将其保存到文件中并按如下方式在屏幕上显示: gst-launch-1.0 -v autovideosrc
我跑 ./autogen.sh在克隆的 repo 中,它没有说以下内容: configure: No package 'gstreamer-plugins-base-1.0' found config
引用http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-dynamic-pipelines.htm
我有一个项目,我们正在使用 gstreamer、x264 等通过本地网络将视频流多播到多个接收器(连接到监视器的专用计算机)。我们在视频源(相机)系统和显示器上都使用了 gstreamer。 我们使用
我正在尝试使用 GStreamer 作为我们正在内部开发的软电话的视频后端。我们的软电话不是基于 GLib 的,有自己的事件循环。是否可以在没有 GMainLoop 的情况下设置 gst 管道并进入各
关于 gstreamer 元素的一些信息,我必须发出一个查询,比如 gst_element_query_position(data.playbin,GST_FORMAT_TIME,¤t)
我是一名优秀的程序员,十分优秀!