问题标签 [java-gstreamer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
962 浏览

java - 如何从网络摄像头捕获图像同时已经使用 Java Gstreamer 从网络摄像头流式传输?

我正在将 gstreamer 库用于需要能够从网络摄像头捕获图像的 Java 项目。

我已经有了显示网络摄像头流的代码,只是不知道如何通过按下旁边的按钮来捕获图像。

我已经搜索了互联网,但只能找到显示流或捕获图像的代码片段,但没有一个说明两者......我试图合并这些代码片段,但这对我不起作用任何一个。

我该怎么做才能让它工作?

0 投票
0 回答
1036 浏览

android - Android 设备上的 gstreamer-java + gstreamer_ndk_bundle + JNA 无法播放声音文件?

我已经为平台 8、10 和 13 构建了 gstreamer_ndk_bundle,没有任何错误和问题。现在我正试图让 gstreamer-java 在 android 上工作,我想我让它工作了。JNA 运行良好(在我的 lib 上进行了测试),我已将所有缺少Structure.setFieldOrder()的调用添加到 gstreamer-java 代码中,删除了 Android 上不存在的所有类和包,它可以在模拟器上编译和运行。另外,我在该平台模拟器上使用了为特定平台编译的 gstreamer 库。

我使用此代码播放 Mp3 文件:

所有需要的库及其依赖项都是这样加载的:

应用程序运行,但我没有听到任何声音!此外,我还尝试将设备的音量调到最大,但也没有声音:

在 Log cat 输出中,我可以看到创建了 audioflinger sink 但没有声音:

我错过了什么?我也尝试了这个PlayBinPlayBinMediaPlayer并尝试了OGG文件,也运行了,但没有声音......

0 投票
2 回答
7219 浏览

android - android 4.1 中的媒体编解码器示例实现

我正在尝试在 android 上显示视频缓冲区。我正在使用 Android 4.1 Jelly Bean 中发布的媒体编解码器 API。

示例如下:

configure 方法接受除 MediaFormat 之外的 3 个其他参数。我已经能够以某种方式弄清楚 MediaFormat,但我不确定其他 3 个参数。(以下)。

有什么线索吗?

此外,如果我不加密我的视频缓冲区,我应该如何处理 MediaCrypto 参数。

要求:

0 投票
1 回答
260 浏览

java - 同步发送视频到 AppSink

我正在使用 gstreamer-java 通过自定义 AppSink 通过 UDP 发送数据。以下是它的有效设置方式:

fileSrc ! streamTee ! displayQueue ! tsdemux ! demuxQueue ! (mpeg2dec || h264dec) ! videosink

streamTee ! sendQueue ! udpSink

我想以模拟实时流的方式发送数据。我假设这样做的唯一方法是通过 videoSink 将发送与播放同步。即以 1.0x 播放速度发送。

但是,设置 udpSink 的sync属性似乎并没有改变任何东西。我已经验证了由于 sendQueue 的原因,数据包会尽可能快地发送出去。

我需要在其他元素之间添加 streamTee 吗?我有什么明显的遗漏吗?

0 投票
1 回答
2109 浏览

java - 限制 gstreamer 的 udpsink 的发送速率

如果我在不解复用的情况下发送数据,有没有办法限制 gstreamer 的 udpsink?

我有一个管道需要发送未复用的流。

filesrc ! tee name=t ! tsdemux ! ffdec_h264 ! videosink t. udpsink

主要关心的是:filesrc ! udpsink

我看不出有任何方法可以通过 filesrc、queue 或 udpsink 选项来限制它。使用sync不起作用,因为我假设没有要同步的媒体流。因此,使用该管道的结果是数据尽可能快地通过 udpsink 馈送,而接收 udpsrc 无法处理。

我们已经尝试使用appsrc作为基本元素编写我们自己的udpsink,使用这个数据包限制方案(thread.sleep(throttleDelay);在数据包发送方法中有一个):

但无论速度设置如何,这似乎都不起作用。太慢了,一帧就通过了。太快了,一两个就通过了。在“正确”的速度(500 kB/s)下,帧以 0.5-2 FPS 的速度进入,但已经严重损坏。

这是在代码中解决这个问题的正确方法吗?gstreamer 有没有办法限制吞吐量?

0 投票
1 回答
266 浏览

java - 麻烦推进和重绘 MPEG2 帧... Processing2 GSVideo1.0 OSX10.8.5

我的项目使用 Eclipse 在 OSX 10.8.5 上使用处理核心 jar 和 GSVideo 库。

我无法让 GSVideo jump(int frame) 或 jump(float time) 实际重绘下一帧。当我在下面的示例程序中反复按 RIGHT 以推进帧时,显示的图像在帧之间来回切换。因为下面的示例适用于 *.mov,但不适用于 *.mpg 视频,所以我想问一下 gstreamer 在 MPEG2 视频中推进帧是否存在任何已知问题。或者 java-gstreamer 或 GS​​Video 有什么问题?

我正在处理 MPEG2 格式的视频。播放和暂停 MPEG2 没有问题。似乎 movie.jump(frameNum or time) 函数不起作用。我已经开始寻找使用 playbin2 的 seek 方法进行帧步进的示例。

这是有关我要跳转的视频的信息。

流 0:类型:CODEC_TYPE_VIDEO;编解码器:CODEC_ID_MPEG2VIDEO;持续时间:7717710;开始时间:433367;时基:1/90000;编码器TB:1001/60000;宽度:1920;身高:1080;格式:YUV420P;帧率:29.97;

示例代码。

示例代码是从这里提取的...... http://gsvideo.sourceforge.net/examples/Movie/Frames/Frames.pde

我已经在互联网上搜索了几天,这也试图与这个论坛联系...... https://sourceforge.net/projects/gsvideo/forums

这篇文章看起来很相似,但我的问题不在于播放(没关系)。我无法跳转到特定帧.... GStreamer:播放 mpeg2

非常感谢 SO 社区为我提供的任何帮助。

更新:为了解决 MPEG2 压缩问题(由下面的 vk 描述),我正在尝试创建一个 gstreamer 管道,以使用 GSVideo 管道或 java-gstreamer 对 mp4 进行动态转码。下面的命令适用于 Ubuntu。

但是下面的 GSVideo Pipeline 显示一个空的灰色窗口:(

0 投票
1 回答
1091 浏览

java-gstreamer - ffdec_mpeg4:gst_pad_push() 的解码错误 = 未链接,同时将 gstreamer-java 与管道 decodebin2 一起使用!ffmpeg色彩空间!视频/x-raw-rgb

我试图让以下管道在 gstreamer-java 中工作(使用 gstreamer-0.10):

“gst-launch-0.10 filesrc location=big_buck_bunny_480p_surround-fix.avi!decodebin2!ffmpegcolorspace!autovideosink”

此管道在命令行上工作。运行 ubuntu 14.04 LTS 的机器 vbox vm

任何人都可以帮助我确定我的问题可能与 Java 代码中的管道有关吗?

java代码如下:

公共静态无效主要(字符串[]参数){

当我开始收到错误时,调试信息如下:

0 投票
1 回答
1228 浏览

gstreamer - gstreamer 中实时源的文件已损坏

我对从 GStreamer 中的实时源(网络摄像头)和伪实时源(截屏)写入的文件有疑问。生成的文件没有时间长度,因此根本无法在 Media Player Classic 中播放。他们确实在 Firefox 中播放,但没有时间长度,有时速度更快。

我使用什么(伪)实时源,或者什么编解码器或容器似乎并不重要。故事总是一样的;没有设定时间长度的错误媒体文件。

但是,当我将选项“num-buffers=100”添加到 dx9screencapsrc 时,src 元素会在该数量的缓冲区之后发送一个 EOS 事件,然后文件在 MPC 和 Firefox 中正确呈现。所以 EOS 事件似乎做了一些事情,以便文件被正确关闭。

我已经尝试过停止管道的常用方法(通过 setState(...))。尝试手动向所有元素发送 EOS 事件,在 Bus 上监听 EOS 事件,然后退出管道。一切都无济于事,文件仍然损坏。

我的问题是,如何在使用(伪)实时源并生成正确的文件时停止管道(即在这种情况下,具有正确的时间长度)。

我在 Java 6 和 Windows 8 上使用 gstreamer-java 和 GStreamer 0.10。以以下管道为例:

在这一点上,我不知道如何解决这个问题。任何帮助是极大的赞赏!

已修复 事实证明,我必须将 EOS 事件发送到 src 元素,而不是发送到管道中的每个元素。

0 投票
0 回答
588 浏览

macos - GStreamer 1.4.4、Android Studio 1.3.2 和 OS X Yosemite 不工作

我正在尝试运行最新的“GStreamer 1.0”教程(http://cgit.freedesktop.org/~slomo/gst-sdk-tutorials/tree/gst-sdk/tutorials)。

我已经为 OS X ( http://gstreamer.freedesktop.org/data/pkg/osx/1.4.4/ ) 安装了 GStreamer 1.4.4,并且我已经成功地使用了 Android NDK。

但是当我尝试从教程中构建任何应用程序时,我会收到下一个错误:

错误:(20, 33) 错误:包 org.freedesktop.gstreamer 不存在

发生这种情况是因为它没有解析这个 import 语句:

导入 org.freedesktop.gstreamer.GStreamer;

我读过这是因为在构建时,它应该使用 GStreamer 文件创建一个新文件夹,但这没有发生,我不知道为什么。

我的 NDK 版本是 r10e,我的 Gradle 版本是 2.2.1,它的插件是 1.3.0。我在 gradle.properties 上使用指令:

android.useDeprecatedNdk=true

我还在 AndroidStudio -> Preferences->Build, Execution, Deployment->Path Variables 上为 GStreamer SDK 设置了一个路径变量:

GSTREAMER_ROOT_ANDROID = /Volumes/HDD/Gstreamer/gst-sdk-debug-arm GSTREAMER_SDK_ROOT_ANDROID = /Volumes/HDD/Gstreamer/gst-sdk-debug-arm

0 投票
0 回答
464 浏览

android - 使用 GStreamer 将视频从 Raspberry Pi 流式传输到 Android

该命令由 Raspberry 使用

我应该在 Android 设备上创建什么管道来接收视频?

我使用本教程进行了一些更改:http ://docs.gstreamer.com/display/GstSDK/Android+tutorial+4%3A+A+basic+media+player

IP地址可以硬编码,所以我删除了代码: