如何查看GST_CAT_INFO,GST_DEBUG等函数的输出?我是否需要使用调试级别集自行编译gstreamer,或者可以在应用程序级别完成?
我尝试使用OpenCV Framework录制视频,并希望将其与一些其他数据流一起保存到Matroska(mkv)容器中.
首先,我认为使用FFmpeg是这样的.但在查看OpenCV源代码并在网上搜索时,我发现了GStreamer.
因为GStreamer中的文档比FFmpeg文档要好得多,所以我更喜欢使用这个框架.
根据我的理解,GStreamer主要用于Streaming,但也可以用于编码和复用视频数据.
使用GStreamer而不是FFmpeg时有什么不利之处吗?
在此先感谢霍斯特
我们正在努力让Gstreamer在DM368 Leopardboard*上工作,我们已成功说服它创建测试视频(videotestsrc),对其进行编码并将其转储到文件中.
工作的管道是:
gst-launch -v videotestsrc num-buffers=100 ! queue ! ffenc_mpeg4 bitrate=800000 ! ffmux_mp4 ! filesink location=video_test.mp4
Run Code Online (Sandbox Code Playgroud)
下一步是修改管道以通过网络流式传输测试卡,使用类似rtsp:// ip_addr:port/streamname的内容在具有VLC的PC上查看,但是关于如何做到这一点的文档看起来很薄(并且经常过时),这些示例似乎模糊了源代码和命令行方式.
我会很自然地承认,> 50%的问题是我们对Gstreamer及其各个部分缺乏了解,我总是发现,如果我有一个可行的例子,我可以用棍子戳它并解决其余的问题.从那里.
我到目前为止:
gst-launch -v videotestsrc ! queue ! ffenc_mpeg4 bitrate=800000 ! rtpmp4vpay ! tcpserversink host=<PC_ip> port=5000
Run Code Online (Sandbox Code Playgroud)
这似乎在VLC中发生了一些事情(使用tcp:// board_ip:port) - 它似乎认为发生了一些事情(不会抛出错误)但不会播放/显示任何内容.当我打破(^ C)gst进程时,VLC会注意到.
所以,基本上 - 任何指导/反馈都会很棒,一个有效的单线工作会很棒.
编辑添加:是的我看到了test_video.c的例子,但那是在编译一个特殊的程序来做一些事情看起来应该可以从命令行调用来证明这个概念.
* = Linux version 2.6.32-17-ridgerun /CPU: ARM926EJ-S
Run Code Online (Sandbox Code Playgroud) 我正在为当地一所大学实施一个讲座捕捉项目.多个视频流将到达一台PC:演示者的桌面幻灯片,演示者自己的摄像机图像以及可选的数字白板捕获.这些传入流将由桌面应用程序管理,该应用程序显示,转码/混合并最终将它们保存到磁盘.将有一些配置选项,因为材料可以以各种方式分发:作为DVD上的Flash应用程序,作为在线Flash应用程序或作为Windows Media Player的视频点播流.
此应用程序应在Windows上运行.可选地,它可以支持其他平台,但它似乎不是高优先级.
GStreamer和DirectShow似乎都能够提供底层技术.我对Linux上的GStreamer有一点经验,我喜欢它的设计,所以我倾向于将它用于这个项目.但是,我不知道它在Windows上的支持程度如何.我找不到关于如何在Windows上构建GStreamer的最新文档.所以我担心在这个过程中我会陷入困境.
DirectShow似乎是一个更安全的选择,因为它使用得更广泛,并且在互联网上有更多可用的文档.
这里有没有人有在Windows上使用GStreamer的经验?它运作良好吗?我应该注意哪些问题?
编辑
我发现了GStreamer OSSBuilds网站,并能够快速实现一个简单的视频播放器(基于'playbin'元素).所以我想我会更进一步追求GStreamer路径.
这是我正在尝试的:
gst-launch -v udpsrc port=1234 ! fakesink dump=1
我测试:
gst-launch -v audiotestsrc ! udpsink host=127.0.0.1 port=1234
一切正常,我可以看到从这里来的包裹 audiotestsrc
现在让我们测试网络摄像头来源:
gst-launch -v v4l2src device=/dev/video0 ! queue ! videoscale method=1 ! "video/x-raw-yuv,width=320,height=240" ! queue ! videorate ! "video/x-raw-yuv,framerate=(fraction)15/1" ! queue ! udpsink host=127.0.0.1 port=1234
没有任何反应,转储中没有包.
这里是一个logdump的什么服务器长篇大论节目.
有没有人对此有所了解?
我正在尝试执行以下操作:使用gstreamer接收视频流并使用opencv进行处理.我找到了一些解决方案,其中一个是将视频写入(来自gstreamer)fifo,然后使用opencv读取它.(OPTION3这里是MJPEG流媒体和解码).问题是我无法打开管道.cvCreateFileCapture永远不会返回.这是我写的部分代码:
if(mkfifo("fifo.avi", S_IRUSR| S_IWUSR) == -1)
{
cout<<"Cant create fifo"<<endl;
cout<<errno<<endl;
}
loop = g_main_loop_new(NULL, false);
fsink = gst_element_factory_make("filesink", "fsink");
g_object_set(G_OBJECT(fsink), "location", "fifo.avi", NULL);
playbin = gst_element_factory_make("playbin2", "play");
g_object_set(G_OBJECT(playbin), "uri", uri.c_str(), NULL);
g_object_set(G_OBJECT(playbin), "video-sink", fsink, NULL);
bus = gst_pipeline_get_bus(GST_PIPELINE(playbin));
gst_bus_add_signal_watch(bus);
g_signal_connect(bus, "message::buffering", G_CALLBACK(&set_playbin_state), playbin);
gst_object_unref(bus);
cvNamedWindow("output", CV_WINDOW_AUTOSIZE);
capture = cvCreateFileCapture("fifo.avi");
Run Code Online (Sandbox Code Playgroud)
程序堆叠在最后一行.PS:我正在使用opencv 2.3.1.
我是gstreamer的新手,我正在尝试使用它.我的第一个目标是在两个设备之间创建一个简单的rtp h2p视频流.我正在使用这两个管道:
发件人: gst-launch-1.0 -v filesrc location=c:\\tmp\\sample_h264.mov ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5000
接收器:
gst-launch-1.0 -v udpsrc port=5000 ! rtpmp2tdepay ! decodebin ! autovideosink
但是对于第一个(发件人),我收到以下错误:
Setting pipeline to PAUSED ...
Pipeline is PE*R*O L(LgIsNtG- l.a.u.n
h-1.0:5788): CRITICAL **: gst_adapter_map: assertion `size > 0' failed
ERROR: from element /GstPipeline:pipeline0/GstFileSrc:filesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2812): gst_base_src_loop (): /GstPipeline:pipeline0/GstFileSrc:filesrc0:
streaming task paused, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline …Run Code Online (Sandbox Code Playgroud) 问题:
我正在Eclipse中构建Android应用程序,它使用共享库libgstreamer-0.10.so (为Android-8平台编译的GStreamer-android NDK Bundle库).我libs/armeabi在项目根文件夹中创建了新文件夹并将其放在那里.此外,我已将所有其他随附的库(其中158个)放在同一个文件夹中.如果我把它放在我的主要活动代码中:
static{
System.loadLibrary("gstreamer-0.10");
}
Run Code Online (Sandbox Code Playgroud)
在Android-8模拟器上构建/安装/运行我的应用程序,它会抛出此错误:
06-15 21:54:00.835: E/AndroidRuntime(402): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1962]: 33 could not load needed library 'libglib-2.0.so' for 'libgstreamer-0.10.so' (load_library[1104]: Library 'libglib-2.0.so' not found)
Run Code Online (Sandbox Code Playgroud)
现在,和libglib-2.0.so它在同一个文件夹中libgstreamer-0.10.so,为什么没有加载?我得到链接器试图加载它/system/lib,libglib-2.0.so只是不存在,但为什么不从它的位置加载它libgstreamer-0.10.so?
所以我libgstreamer-0.10.so用这个命令去发现哪些lib 依赖:
arm-linux-androideabi-readelf -d libgstreamer-0.10.so
Run Code Online (Sandbox Code Playgroud)
结果:
Dynamic section at offset 0x118b64 contains 29 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libglib-2.0.so]
0x00000001 (NEEDED) Shared library: [libgobject-2.0.so]
0x00000001 (NEEDED) Shared …Run Code Online (Sandbox Code Playgroud) 在注意到iOS 8中的程序员可以使用HW-H264-Decoder之后,我想立即使用它.来自WWDC 2014的"直接访问视频编码和解码"有一个很好的介绍.你可以看看这里.
基于案例1,我开始开发一个应用程序,应该能够从GStreamer获取H264-RTP-UDP-Stream,将其下载到'appsink'元素中,以便直接访问NAL单元并执行转换为创建CMSampleBuffers,然后我的AVSampleBufferDisplayLayer可以显示.
有趣的一段代码完成以下所有操作:
//
// GStreamerBackend.m
//
#import "GStreamerBackend.h"
NSString * const naluTypesStrings[] = {
@"Unspecified (non-VCL)",
@"Coded slice of a non-IDR picture (VCL)",
@"Coded slice data partition A (VCL)",
@"Coded slice data partition B (VCL)",
@"Coded slice data partition C (VCL)",
@"Coded slice of an IDR picture (VCL)",
@"Supplemental enhancement information (SEI) (non-VCL)",
@"Sequence parameter set (non-VCL)",
@"Picture parameter set (non-VCL)",
@"Access unit delimiter (non-VCL)",
@"End of sequence (non-VCL)",
@"End of stream (non-VCL)", …Run Code Online (Sandbox Code Playgroud) 我想用GStreamer支持构建opencv.
我按照本指南从源代码(版本1.8.1)构建了GStreamer:http: //kacianka.at/ ?p = 145我的主目录中有'gstreamer_build'文件夹,它包含'bin'文件夹,其中包含:
gst-device-monitor-1.0 gst-discoverer-1.0 gst-inspect-1.0 gst-launch-1.0 gst-play-1.0 gst-stats-1.0 gst-typefind-1.0 orc-bugreport orcc
我已将此路径添加到我的环境变量PATH中.
当我使用cmake时:
cmake -D CMAKE_BUILD_TYPE = RELEASE -D CMAKE_INSTALL_PREFIX =/usr/local -D OPENCV_EXTRA_MODULES_PATH =〜/ opencv_contrib/modules -D BUILD_opencv_python3 = ON -D WITH_GSTREAMER = ON -D WITH_FFMPEG = OFF ..
我得到以下输出清楚地表明没有找到gstreamer:
-- checking for module 'gstreamer-base-1.0'
-- package 'gstreamer-base-1.0' not found
-- checking for module 'gstreamer-video-1.0'
-- package 'gstreamer-video-1.0' not found
-- checking for module 'gstreamer-app-1.0'
-- package 'gstreamer-app-1.0' not found
-- checking for module 'gstreamer-riff-1.0' …Run Code Online (Sandbox Code Playgroud)