标签: gstreamer

使用GStreamer编辑服务的过渡会冻结,但无需过渡即可正常工作

我正在尝试使用gstreamer的GStreamer编辑服务来连接2个视频,并在两者之间进行转换.

这个命令只是将两段视频连接在一起而没有过渡,工作正常:

ges-launch-0.10 vshort01.mov 0 5 vshort02.mov 5 5 -r -o file:///tmp/foo.mov
Run Code Online (Sandbox Code Playgroud)

这是它的输出:

$ ges-launch-0.10 vshort01.mov 0 5 vshort02.mov 5 5 -r -o file:///tmp/foo.mov
save_path: (null)
load_path: (null)
Adding file:///home/rory/vshort01.mov inpoint:0:00:00.000000000 duration:0:00:05.000000000
Adding file:///home/rory/vshort02.mov inpoint:0:00:05.000000000 duration:0:00:05.000000000
Done
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用此命令在两个视频之间进行短暂转换,它就会挂起.

ges-launch-0.10 vshort01.mov 0 5 +transition crossfade 2 vshort02.mov 5 5 -r -o file:///tmp/foo.mov
Run Code Online (Sandbox Code Playgroud)

输出,我得到的是:

save_path: (null)
load_path: (null)
Adding file:///home/rory/vshort01.mov inpoint:0:00:00.000000000 duration:0:00:05.000000000
Adding <transition:crossfade> duration 0:00:02.000000000
Adding file:///home/rory/vshort02.mov inpoint:0:00:05.000000000 duration:0:00:05.000000000
Run Code Online (Sandbox Code Playgroud)

它挂起了.该文件/tmp/foo.mov保持0字节,并且没有CPU活动.

我是ges0.10-toolsubuntu 11.04 natty上的软件包版本0.10.1-1.我今天从git clone尝试了一个新构建的gst-editing-services版本c2668d058501513b734c8a8013a5e78c817712bb …

video ubuntu video-processing gstreamer

48
推荐指数
0
解决办法
1036
查看次数

学习GObject和Glib的材料

我很舒服C.但需要学习GObjectGlib进行gstreamer.我在网上找到的只是Gobject参考手册.它很好,但寻找Gobject/Glib的教程,主要关注gstreamer.

所以请分享任何其他资源来学习滑稽和gobject.

c gnome gobject glib gstreamer

43
推荐指数
5
解决办法
2万
查看次数

GStreamer在Qt5 raspberry pi中遇到了一般的流错误

我正在尝试使用Raspberry pi 2 B中的QtMediaPlayer播放视频.源代码如下:

QMediaPlayer *media;
QVideoWidget *video;
...
...
media = new QMediaPlayer(parent);
video = new QVideoWidget(parent);
media->setVideoOutput(video);
media->setMedia(QUrl::fromLocalFile("/home/pi/Desktop/test3.mp4"));
media->play();
Run Code Online (Sandbox Code Playgroud)

但结果是一个空白的视频屏幕,并出现以下错误:

** (Bus:2148): WARNING **: ffmpegcolorspace-vo: size 1105920 is not a   
multiple of unit size 829440
Error: "GStreamer encountered a general stream error."
Run Code Online (Sandbox Code Playgroud)

系统信息

运行最新的raspbian Jessie OS,已安装的Qt5.3,已安装的gstreamer0.10-plugins-good/bad/ugly/ffmpeg和已安装的Mpeg-2许可证

这是视频test3.mp4

我在安装了Qt5的Windows中运行此代码; 它在那里工作.但它不适用于Raspberry pi.请告诉我这里我缺少什么.

从壳牌尝试管道

在此输入图像描述

c++ qt ffmpeg gstreamer raspberry-pi2

38
推荐指数
1
解决办法
2048
查看次数

MediaCodec和Camera:颜色空间不匹配

我一直在尝试使用新的低级MediaCodec,在Android平板电脑上使用H264编码来处理摄像头捕获的输入.我已经遇到了一些困难,因为MediaCodecAPI的文档很少,但我终于有了一些工作要做.

我按如下方式设置相机:

        Camera.Parameters parameters = mCamera.getParameters();
        parameters.setPreviewFormat(ImageFormat.YV12); // <1>
        parameters.setPreviewFpsRange(4000,60000);
        parameters.setPreviewSize(640, 480);            
        mCamera.setParameters(parameters);
Run Code Online (Sandbox Code Playgroud)

对于编码部分,我正在实例化MediaCodec对象,如下所示:

    mediaCodec = MediaCodec.createEncoderByType("video/avc");
    MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 640, 480);
    mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 500000);
    mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
    mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,
            MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar); // <2>
    mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
    mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
    mediaCodec.start();
Run Code Online (Sandbox Code Playgroud)

最终目标是创建一个RTP流(并与Skype对应),但到目前为止,我只是将原始H264直接流式传输到我的桌面.在那里,我使用以下GStreamer管道来显示结果:

gst-launch udpsrc port=5555 ! video/x-h264,width=640,height=480,framerate=15/1 ! ffdec_h264 ! autovideosink
Run Code Online (Sandbox Code Playgroud)

一切都很好,除了颜色.我需要在计算机中设置2个颜色格式:一个用于摄像头预览(行标记<1>)和一个用于MediaCodec对象(标记为<2>)

确定<1>我使用的线的可接受值parameters.getSupportedPreviewFormats().据此,我知道相机上唯一支持的格式是ImageFormat.NV21ImageFormat.YV2.

<2>,我检索的MediaCodecInfo.CodecCapabilities -object类型视频/ AVC,作为整数值与对应19(MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar和2130708361(其不与任何值对应MediaCodecInfo.CodecCapabilities).

除上述之外的任何其他值都会导致崩溃.

结合这些设置会得到不同的结果,我将在下面展示.这是Android上的屏幕截图(即"真实"颜色): 在Android平板电脑上输入 以下是Gstreamer显示的结果:

<1> …

android colors rtp gstreamer h.264

32
推荐指数
2
解决办法
2万
查看次数

GStreamer rtp流到vlc

我在弄清楚如何使用gstreamer创建一个简单的rtp流并在vlc上显示它时遇到了一些麻烦.

我安装了GStreamer 0.10.30和VLC 1.1.3.我唯一的要求是使用MPEG4或H.264编解码器.

现在,我可以通过这个简单的管道流式传输GStreamer videotestsrc:

gst-launch videotestsrc ! ffenc_mpeg4 ! rtpmp4vpay ! udpsink host=127.0.0.1 port=5000
Run Code Online (Sandbox Code Playgroud)

它输出客户端接收流所需的"上限":

/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001b001000001b58913000001000000012000c48d8800f50a041e1463000001b24c61766335322e3132332e30, payload=(int)96, ssrc=(uint)365697461, clock-base=(uint)390754204, seqnum-base=(uint)10399
Run Code Online (Sandbox Code Playgroud)

我还可以使用以下管道显示流:

gst-launch udpsrc uri=udp://127.0.0.1:5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001b001000001b58913000001000000012000c48d88007d0a041e1463000001b24c61766335322e3132332e30, payload=(int)96, ssrc=(uint)298758266, clock-base=(uint)3097828288, seqnum-base=(uint)63478" ! rtpmp4vdepay ! ffdec_mpeg4 ! autovideosink
Run Code Online (Sandbox Code Playgroud)

但是当我尝试用vlc接收流时:

vlc -vvv rtp://127.0.0.1:5000
Run Code Online (Sandbox Code Playgroud)

我一无所获......

streaming vlc gstreamer

28
推荐指数
2
解决办法
7万
查看次数

Gnonlin的预定暂停

我正在使用Gnonlin播放2个视频.有一刻,我想暂停一个视频并运行另一个视频.但是,我不想手动暂停管道,因为另一个视频也将被暂停.

例如:

self.video[0].set_property("location", LOCATION_VIDEO1)
self.video[0].set_property("start", 0 * gst.SECOND)
self.video[0].set_property("duration", 5 * gst.SECOND)
self.video[0].set_property("media-start", 0 * gst.SECOND)
self.video[0].set_property("media-duration", 5 * gst.SECOND)
Run Code Online (Sandbox Code Playgroud)

此视频运行5秒钟.我该怎么做才能在接下来的5秒内暂停或停止播放此视频?有没有办法显示相同的帧5秒?

python gstreamer gnonlin

25
推荐指数
1
解决办法
434
查看次数

python中基于opencv图像创建rtsp流

我的目标是从 rtsp 服务器读取帧,对帧进行一些 opencv 操作并将操作的帧写入新的 rtsp 服务器。

我尝试了以下基于在 python 中从 opencv 写入 Gstreamer 管道的方法,但我无法弄清楚创建 rtsp 服务器的适当 gst-launch-1.0 参数应该是什么。任何人都可以协助 gst-launch-1.0 的适当参数吗?我试过的那些卡在“管道正在预滚动”中

import cv2

cap = cv2.VideoCapture("rtsp://....")

framerate = 25.0

out = cv2.VideoWriter('appsrc ! videoconvert ! '
  'x264enc noise-reduction=10000 speed-preset=ultrafast 
   tune=zerolatency ! '
  'rtph264pay config-interval=1 pt=96 !'
  'tcpserversink host=192.168.1.27 port=5000 sync=false',
  0, framerate, (640, 480))


counter = 0
while cap.isOpened():
  ret, frame = cap.read()
  if ret:
    out.write(frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
      break
  else:
    break

cap.release()
out.release()
Run Code Online (Sandbox Code Playgroud)

我还尝试了另一种基于Write …

python opencv rtsp gstreamer

21
推荐指数
1
解决办法
1万
查看次数

Python从视频文件中提取wav

有关:

如何使用python从视频文件中提取音频?

从wav中提取视频中的音频

如何从视频中翻录音频?

我的问题是如何从视频文件中提取wav音轨video.avi呢?我阅读了许多文章,并且人们建议使用(从Python)ffmpeg作为子进程(因为没有可靠的python绑定到ffmpeg - 唯一的希望是,PyFFmpeg但我发现它现在没有维护).我不知道这是不是正确的解决方案,我正在寻找一个好的解决方案.
我看了gstreamer并发现它很好但无法满足我的需求 - 我发现从命令行完成此任务的唯一方法就像

 gst-launch-0.10 playbin2 uri=file://`pwd`/ex.mp4  audio-sink='identity single-segment=true ! audioconvert ! audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)16000, channels=(int)1 ! wavenc !  filesink location=foo.wav’ 
Run Code Online (Sandbox Code Playgroud)

但它效率不高,因为我需要在播放视频和同时写入wav文件时等待多年.

ffmpeg 好多了:

avconv  -i foo.mp4  -ab 160k -ac 1 -ar 16000 -vn ffaudio.wav
Run Code Online (Sandbox Code Playgroud)

但是我无法从python启动它(不是作为命令行子进程).你能否指出我从python作为命令行实用程序启动ffmpeg的优点和缺点?(我的意思是使用python multiprocessing模块或类似的东西).

第二个问题.

将长wav文件剪成碎片的简单方法是什么,这样我就不会破坏任何单词?我的意思是10到20秒的长度,句子/单词在暂停期间的开始和结束?

我知道如何在任意作品上打破它们:

import wave


win= wave.open('ffaudio.wav', 'rb')
wout= wave.open('ffsegment.wav', 'wb')

t0, t1= 2418, 2421 # cut audio between 2413, 2422 seconds
s0, s1= int(t0*win.getframerate()), int(t1*win.getframerate())
win.readframes(s0) …
Run Code Online (Sandbox Code Playgroud)

python audio video ffmpeg gstreamer

20
推荐指数
3
解决办法
4万
查看次数

Qt5 VideoOverview示例无效

我在Qt视频概述中给出了一个月的视频示例.

我试过那段代码,但只有我得到的是空白方块(QWidget).我使用GStreamer0.10进行Qt5上的媒体播放.我也用gst-launch-0.10命令播放了视频,它运行正常,但我无法确定Qt中发生了什么以及为什么它不起作用?

我查看了位于的X Server的错误日志/etc/X11/Xorg.0.log,当我使用fbdev作为其中配置的显示驱动程序/etc/X11/xorg.conf时显示错误:

"FBDEV(0):FBIOPUTCMAP:参数无效"

当我使用modesetting驱动程序时,一切都行为相同,但没有错误.我发现,当我删除xorg.conf文件并再次启动X服务器时,视频可以正常工作,但缺少颜色和闪烁也可以在我的Ubuntu VM和vnc客户端上运行良好.我们将非常感谢您的建议和帮助.

  • 目标机器:BeagleBone Black

  • 发行:Debian Jessie 8.2

  • 内核版本:4.1.15-ti-rt-r43

/ usr/lib/xorg/modules/drivers中可用驱动程序列表:ati_drv.so,mach64_drv.so,nouveau_drv.so,r128_drv.so,vesa_drv.so,fbdev_drv.so,modesetting_drv.so,omap_drv.so,radeon_drv.所以

当我尝试在Debian Jessie 8.2下的BeagleBone Black上启动我的Qt应用程序时,这是来自Xorg的完整错误日志 - > http://pastebin.com/4x8KztBk

来自/ etc/X11的xorg.conf文件 - > http://pastebin.com/4WhX8pJc

linux gstreamer qt5 beagleboneblack qtmultimedia

19
推荐指数
1
解决办法
531
查看次数

GStreamer通过HTTPS视频流传输RTSP

我有一个通过HTTPS进行RTSP的流.

握手是安全的(通过https),但握手完成后的数据未加密(在RTSP中).

默认情况下,GStreamer不会流式传输,因为它也希望数据加密(在RTSPS中),这不是我的情况.

我尝试了很多东西但似乎没什么用.例如,在我开始获取流后,我尝试将其写入本地端口并将该URL传递给GStreamer,但它不会播放.

我是这个GStreamer的新手,所以我对玩家的了解有限.我正在寻找一种方法来通过GStreamer完成握手,这是HTTPS(安全),然后我得到的流没有加密.如果有人做过类似的事情,请告诉我任何流式RTSP的方法.我尝试过类似的东西

nativeSetPipeline("rtspsrc location=rtsph://<URL of the video stream> latency=100 ! rtph264depay ! avdec_h264 ! glimagesink");
Run Code Online (Sandbox Code Playgroud)

上面的管道默认工作,GStreamer通过HTTP播放RTSP,但是当我通过HTTPS尝试RTSP时

nativeSetPipeline("rtspsrc debug = TRUE do-rtcp=false location=\"rtspsh://<secured URL of the stream>" latency=100 do-rtsp-keep-alive=true ! rtph264depay ! avdec_h264 ! glimagesink");
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为GStreamer也希望流也得到保护.有关如何通过HTTPS流式传输RTSP的任何想法/代码段或示例?我使用的当前版本是1.10.4.

https android rtsp gstreamer gstreamer-1.0

19
推荐指数
1
解决办法
1104
查看次数