我已经创建了 rtsp/h264/mjpeg 服务器。效果很好。但现在我必须查询每个新连接的客户端。例如,我必须从客户端查询获取请求的分辨率:rtsp://192.116.10.20:8554/stream?width=1920&height=1280
我尝试使用以下代码来做到这一点:
....
gulong clientConnectedConfigureId = g_signal_connect(m_server, "client-connected", (GCallback)ClientConnected, this);
....
static void ClientConnected(GstRTSPServer *gstrtspserver, GstRTSPClient *arg1, gpointer user_data)
{
GstRTSPConnection *connection = gst_rtsp_client_get_connection(arg1);
if(!connection)
{
return;
}
GstRTSPUrl *uri = gst_rtsp_connection_get_url(connection);
if(!uri)
{
return;
}
gchar *urlString = gst_rtsp_url_get_request_uri (uri);
std::stringstream ssTemp;
ssTemp << "ClientConnected - urlString = " << urlString;
InternalLog::Debug(ssTemp.str());
g_free(urlString);
}
Run Code Online (Sandbox Code Playgroud)
GstRTSPUrl 包含以下成员: //rtsp[u]://[user:passwd@]host[:port]/abspath[?query]
通过查询 rtsp://192.116.10.20:8554/stream?width=1920&height=1280 从 VLC 连接后,结果如下:
ClientConnected - urlString = rtsp://192.116.10.20:61099(null)
GstRTSPUrl 仅包含主机=192.116.10.20 和端口=61099。其他字段如“abspath”或“query”等于 NULL。
在 netstat 实用程序中,我看到端口 61099 是 VLC …
(在我的 mac pro 上使用 ubuntu 16 0n。)
要集成 gstreamer 和 pocketsphinx,我需要三个 .pc 文件,如官方网站所述:
- gstreamer-1.0.pc
- gstreamer-base-1.0.pc
- gstreamer-plugins-base-1.0.pc
我启动一个新的空 ubuntu 18。通过安装 gstreamer
$ sudo apt-get install libgstreamer1.0-dev
Run Code Online (Sandbox Code Playgroud)
但在上一个命令之后,三个重要的 .pc 文件中仅存在两个。如果我 cd 到/usr/并运行:
sudo find . -print | grep -i 'gstreamer-plugins-base-1.0'
Run Code Online (Sandbox Code Playgroud)
终端返回空(未找到)。同时,
sudo find . -print | grep -i 'gstreamer-base-1.0'
和
sudo find . -print | grep -i 'gstreamer-1.0'
Run Code Online (Sandbox Code Playgroud)
会给我正确的路径。
丢失的gstreamer-plugins-base-1.0.pc文件在哪里?谢谢。
如果只有两个而不是三个.pc 文件,pocketsphinx 的配置将不起作用。
我希望使用 VS Code 在 Linux Virtualbox 中运行 GStreamer Hello World 示例。
Gstreamer安装说明请参见此处。
GStreamer HelloWorld 信息请参见此处。
手动 C 构建/编译命令非常$ gcc basic-tutorial-1.c -o basic-tutorial-1 'pkg-config --cflags --libs gstreamer-1.0' 有效。但是,我希望使用 Visual Studio Code,并且尝试将“pkg-config --cflags --libs gstreamer-1.0”内容推送到我的 launch.json 文件中。我不清楚具体如何做到这一点。
我从一个 launch.json 文件开始,我相信该文件是由 Microsoft 的 C/C++ 插件在 VS Code 中创建的。我没有添加 CMakeLists 文件。VS Code 中没有安装其他扩展。
我当前的 launch.json 文件:(测试#17 左右...)
{
"version": "0.2.0",
"configurations": [
{
"name": "gcc - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [], …Run Code Online (Sandbox Code Playgroud) 我有一个 RTSP 源。数据以 NAL 单元流的形式出现。我认为 RTP 数据包需要“depay”或“解析”为 H.264 解码器可以理解的内容。
rtspsrc ! rtph264depay ! h264parse ! avdec_h264 ! ...
Run Code Online (Sandbox Code Playgroud)
depay 和 parse 之间的实际区别是什么?直觉上我觉得他们在做同样的事情。但如果我删除其中之一,Gstreamer 管道将无法工作。
我有一个最小的GStreamer程序:
#include <gst/gst.h>
int main() {
gst_init(NULL, NULL);
gst_deinit();
}
Run Code Online (Sandbox Code Playgroud)
我使用gcc test.c $(pkg-config --cflags --libs gstreamer-1.0) -fsanitize=address(gcc 版本为 12.1.0)构建它,运行它并从地址清理器获得以下输出:
==87326==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 16384 byte(s) in 1 object(s) allocated from:
#0 0x7f53e28bfa89 in __interceptor_malloc /usr/src/debug/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7f53e26c1b19 in g_malloc (/usr/lib/libglib-2.0.so.0+0x5db19)
SUMMARY: AddressSanitizer: 16384 byte(s) leaked in 1 allocation(s).
Run Code Online (Sandbox Code Playgroud)
我是 GStreamer 和 GLib 的新手。这对于 GStreamer 程序来说正常吗?如果是的话,在使用消毒剂运行单元测试时,有什么优雅的方法可以忽略这种泄漏?
我对gstreamer的世界很新.我想知道,是否可以通过gstreamer流式传输网络摄像头?到目前为止,我见过的唯一一个包是linux.v4l2(适用于Linux的视频).还有一个Windows网络摄像头包吗?什么是正确的python语法?
DJ
我正在尝试使用gstreamer将DVD转换为mkv文件.我使用的管道是:
gst-launch -evv multifilesrc location="VTS_01_%d.VOB" index=1 ! dvddemux name=demuxer \ matroskamux name=mux ! filesink location=test.mkv \ demuxer.current_video ! queue ! mpeg2dec ! x264enc ! mux. \ demuxer.current_audio ! queue ! ffdec_ac3 ! lamemp3enc ! mux.
不幸的是,管道不会超出预卷.当我用例如ffenc_mpeg4替换x264enc时,一切正常..
安装gStreamer SDK 安装后,我现在尝试使用Visual Studio 2015编译并运行随附的教程文件.这里的教程文档
鉴于这些最初是在VS2010中制作的,我必须升级教程项目才能使用它们.接下来,我不得不添加我的include目录,只留下一组LNK2019未解决的外部符号错误
鉴于msdn网站上列出的各种可能原因,此时我觉得解决这个问题有点超出我的意义.
对于教程1,我有16个LNK2019错误,例如.
错误LNK2019未解析的函数_main basic-tutorial-1中引用的外部符号_gst_object_unref
与以下"外部符号"相关的所有16个错误
_gst_object_unref
_gst_mini_object_unref
_gst_bus_timed_pop_filtered
_gst_element_get_bus
_gst_element_set_state
_gst_parse_launch
_gst_init
在我的gStreamer SDK目录中搜索文件内容我发现所有这些都发生在
d:\的GStreamer-SDK\0.10\x86_64的\ LIB\libgstreamer,0.10.dll.a
所以我假设这个问题与libgstreamer-0.10.dll.a lib的链接有关.
我应该提供更多细节吗?有什么建议?
我对Gstreamer来说还很陌生。
我需要编写一个视频客户端,该客户端能够使用GStreamer从RTSP源流式传输数据。我将VLC配置为使用RTSP流式传输笔记本电脑上的视频,并且我想创建一个管道来获取并显示该流。我尝试使用playbin,一切正常。关键是我需要微调用于流式传输视频的延迟,但是似乎我无法使用playbin做到这一点。
我尝试过,rtspsrc因为它可以处理延迟,但是我不知道如何在任何窗口上显示视频。那就是我创建的管道:
gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/test latency=300 ! decodebin ! autovideosink
Run Code Online (Sandbox Code Playgroud)
我收到错误“流任务已暂停,原因未协商(-4)”。
在深入浏览互联网后,我尝试了不同的管道,但我肯定会错过一些东西。如何编写gstreamer管道以显示来自RTSP的视频?
最终目标是拥有至少可以在延迟方面可调的管道,因此我有两种选择:
我使用的是Xubuntu 16.04,gstreamer-tools-1.0(也使用了0.10),我通过VLC流式传输的视频具有mp4扩展名。
执行以下命令时
gst-launch-1.0 filesrc location = Wildlife.wmv!decodebin!排队!ffmpegcolorspace!autovideosink dec.!排队!audioconvert!听觉样本!autoaudiosink
我得到如下错误.
ERROR GST_PIPELINE grammar.y:716:priv_gst_parse_yyparse: no element "ffmpegcolorspace"
ERROR GST_PIPELINE grammar.y:801:priv_gst_parse_yyparse: link has no sink [source=@0000000003066F90]
ERROR GST_PIPELINE grammar.y:801:priv_gst_parse_yyparse: link has no source [sink=@000000000306B060]
ERROR GST_PIPELINE grammar.y:1138:priv_gst_parse_launch: No src-element named "dec" - omitting link
WARNING: erroneous pipeline: no element "ffmpegcolorspace"
Run Code Online (Sandbox Code Playgroud)
这里有什么问题?