在gstreamer rtp h264 depayloader中,检查输入流是字节流还是打包流.
谁能告诉我这两种格式有什么区别?
此外,对于字节流,codec_data不会写入大写字母.知道为什么会这样吗?
我遇到的问题与以下代码有关:
module Main(main) where
import qualified Media.Streaming.GStreamer as GS
import Data.Maybe
import System.IO
import System.Exit
import System.Glib.MainLoop as Glib
import System.Glib.Signals as Glib
import System.Glib.Properties as Glib
makeElement:: String ? String ? IO GS.Element
makeElement elementType elementName = do
element ? GS.elementFactoryMake elementType (Just elementName)
case element of
Just element' ? return element'
Nothing ? do
hPutStrLn stdout ("Cannot create element!")
hFlush stdout
exitFailure
player = do
GS.init
pipeline ? GS.pipelineNew "video-stream"
source ? makeElement "v4l2src" "video-source"
color ? makeElement …Run Code Online (Sandbox Code Playgroud) 我有一台IP摄像机,它是MJPEG格式的流媒体视频.现在我的目标是接收它并在我自己的自定义Android应用程序中显示它.为此我在android平台上有三个编程选择:
那么请建议更好的解决方案?
我没有使用FFMPEG或GStreamer的经验.那么这样做的可行性是什么?
我想使用Gstreamer和Python为MPEG-4 AVC视频创建缩略图.实质上:
我一直在看这个类似的问题,但我无法弄清楚如何在没有用户输入的情况下自动进行搜索和帧捕获.
总而言之,我如何按照上述步骤使用Gstreamer和Python捕获视频缩略图?
我正在尝试使用v4l2loopback在Chrome中创建虚拟相机,其中传入的视频是通过RTP输入的H264.
我在Chrome中识别GStreamer测试视频方面取得了一些成功MediaStreamTrack.getSources:
$ sudo modprobe v4l2loopback
$ gst-launch-1.0 videotestsrc ! v4l2sink device=/dev/video0
Run Code Online (Sandbox Code Playgroud)
这很有效,Chrome会显示视频测试源.
但是,当我使用传入的h264/RTP源时,设备不会显示MediaStreamTrack.getSources.例如:
gst-launch-1.0 -v tcpclientsrc host=<IPADDRESS> port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! v4l2sink device=/dev/video0
Run Code Online (Sandbox Code Playgroud)
这是什么原因?解决方案是什么?
我原本以为这可能与视频格式有关,也许需要通过v4l2loopback设置正确的上限.
我正在使用Nitrogen6x板和ov5640相机(mipi).
相机没有使用标准v4l/v4l,但我们可以使用GStreamer为其驱动程序(mfw_v4l)流式传输视频:
gst-launch mfw_v4lsrc ! autovideosink
Run Code Online (Sandbox Code Playgroud)
我想通过GStreamer(OpenCV内部的GStreamer)调用OpenCV中的相机.我在这里问了一个关于在OpenCV中调用GStreamer的问题,这是后续的.
如果我启用了GStreamer支持,则会在源代码中检查它,但OpenCV会尝试使用标准V4L/V4L2作为GStreamer,我想要更改它.有关调用GStreamer的部分位于cap_gstreamer.cpp中:
CvCapture* cvCreateCapture_GStreamer(int type, const char* filename )
{
CvCapture_GStreamer* capture = new CvCapture_GStreamer;
if( capture->open( type, filename ))
return capture;
delete capture;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想这是我应该以某种方式指向相机驱动程序的部分.("type"这里可能是一个与驱动程序相关的数字(在precomp.hpp中定义),但是什么是"文件名"?)
有关如何通过GStreamer访问相机的任何建议都会有所帮助和赞赏.谢谢!
我正在尝试交叉编译GStreamer.版本是1.2.3.主机PC的操作系统是x86 linux,而目标系统的操作系统是MIPSEL linux操作系统.
我成功编译了目标设备的gstreamer和插件.并且gst-launch-1.0可以执行.所以我尝试使用基本插件libgstvideotestsrc.但它没有用.所以我运行```gst-inspect-1.0'来检查插件,然后我发现结果如下.
# gst-inspect-1.0 -b
Blacklisted files:
libgstinterlace.so
libgstfbdevsink.so
libgstgeometrictransform.so
libgstmultifile.so
libgstencodebin.so
libgstfestival.so
libgstlevel.so
libgstdvdspu.so
libgstauparse.so
libgsty4menc.so
libgstvideofilter.so
libgstvideoscale.so
libgstaccurip.so
libgstvideoconvert.so
libgstaudioparsers.so
libgsttcp.so
libgstvolume.so
libgstcoreelements.so
libgstmpegtsdemux.so
libgstid3tag.so
libgstadpcmdec.so
libgstmfc.so
libgstrtpmanager.so
libgstaudiotestsrc.so
libgstdeinterlace.so
libgstdebug.so
libgstplayback.so
libgstspeed.so
libgstasfmux.so
libgsticydemux.so
libgstmpegpsdemux.so
libgstalaw.so
libgstwavparse.so
libgstpnm.so
libgstnavigationtest.so
libgstcamerabin2.so
libgstsdpelem.so
libgstisomp4.so
libgstliveadder.so
libgstmpegtsmux.so
libgstautodetect.so
libgstmultipart.so
libgstvideofiltersbad.so
libgstaudioresample.so
libgstautoconvert.so
libgstdvbsuboverlay.so
libgstid3demux.so
libgstvideobox.so
libgstgio.so
libgstdtmf.so
libgstremovesilence.so
libgstreplaygain.so
libgstaudioconvert.so
libgstcutter.so
libgstgaudieffects.so
libgstdvb.so
libgstaudiovisualizers.so
libgstudp.so
libgstimagefreeze.so
libgstadder.so
libgstpcapparse.so
libgstmxf.so
libgstshapewipe.so
libgstgdp.so
libgstwavenc.so
libgstshm.so
libgstflv.so
libgstfreeverb.so
libgstoss4audio.so …Run Code Online (Sandbox Code Playgroud) 在干净的Debian 8安装上,我必须安装一些gstreamer-plugins.虽然大多数已经安装或可以通过apt-get轻松安装,但gstreamer0.10-ffmpeg无法安装:
sudo apt-get install gstreamer0.10-ffmpeg
Run Code Online (Sandbox Code Playgroud)
抛出以下警告:
包gstreamer0.10-ffmpeg不可用,但由另一个包引用.这可能意味着包丢失,已被淘汰或仅可从其他来源获得E:包'gstreamer0.10-ffmpeg'没有安装候选
我怎么能安装包呢?
我需要使用ffmpeg/avconv将jpg帧传输到python PIL(Pillow)Image对象,使用gst作为中介*.我一直在寻找这个答案而没有太多运气.我想我很接近 - 但我被困住了.使用Python 2.7
我从python启动的理想管道如下所示:
我将控制的前几个步骤作为单个命令,将.jpgs写入磁盘的速度与硬件允许的速度一样快.
该命令看起来像这样:
command = [
"ffmpeg",
"-f video4linux2",
"-r 30",
"-video_size 1280x720",
"-pixel_format 'uyvy422'",
"-i /dev/video0",
"-vf fps=30",
"-f H264",
"-vcodec libx264",
"-preset ultrafast",
"pipe:1 -",
"|", # Pipe to GST
"gst-launch-1.0 fdsrc !",
"video/x-h264,framerate=30/1,stream-format=byte-stream !",
"decodebin ! videorate ! video/x-raw,framerate=30/1 !",
"videoconvert !",
"jpegenc quality=55 !",
"multifilesink location=" + Utils.live_sync_path + "live_%04d.jpg"
]
Run Code Online (Sandbox Code Playgroud)
如果使用popen或os.system运行,这将成功将帧写入磁盘.
但是我没有将帧写入磁盘,而是想要捕获我的子进程管道中的输出,并在写入时将帧读取到类似文件的缓冲区中,然后由PIL读取.
像这样的东西:
import subprocess as …Run Code Online (Sandbox Code Playgroud) 我正在尝试实时进行一些视频处理.我开始尝试FFmpeg,但我看到了这个问题:
哪个进一步链接到这个问题:
ffmpeg,libav和avconv之间有什么区别和相似之处?
这篇博文:
http://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html
读完之后我才知道Libav是FFmpeg的一个分支,正在分开开发.我需要使用Libav或FFmpeg或libVLC或Gstreamer开发C++应用程序.我认为在回答这些问题后会有很多变化.对这些工具进行一些基准测试会很棒.
你们对视频和音频处理的任何基准测试结果有什么偏好?我需要快速处理帧并将视频流式传输到多个C++应用程序,这将是解决此问题的最佳方法,以及最佳选择工具是什么?
因此,截至2018年,这些工具在视频处理方面的现状如何.知道熟悉这些工具的视频处理人员的一些结果会很高兴.