问题标签 [mpv]

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 投票
2 回答
936 浏览

java - 使用 String 的 JNA 调用与使用 byte[] 的行为不同

我有一个 C 函数的 JNA Java 接口,mpv_set_option_string定义为:

当我这样称呼它时:

-5我从上次调用中返回错误 ( ),表示keep-open未找到选项 ( )。

但是,如果我将 JNA 函数签名更改为:

...然后这样称呼它:

...它不返回错误(0)并且可以正常工作(或者看起来如此)。

我没有得到的是,JNA 应该String默认编码为char *UTF-8 编码并NUL终止(正是我手动执行的操作),但我得到了不同的结果。

任何人都可以对此有所了解吗?

0 投票
1 回答
41 浏览

java - Linux播放视频命令几秒钟后冻结

我在 Java jar 应用程序中运行 shell 命令,我使用运行时和进程 exec,但几分钟后视频和 java 进程冻结。

当我在 shell 控制台中单独运行命令时,它工作正常。

在控制台中它可以工作:

当我在 java jar 中运行此命令时出现问题:

我在 Ubuntu 16.04 Java Openjdk 8 中运行它

0 投票
1 回答
136 浏览

c - NSView 的 libmpv intptr_t

我正在尝试在 swift 项目中使用 libmpv。我已将所有内容联系起来,并尝试遵循基本示例

问题是,要显示视频,我必须将整数指针 (intptr_t) 传递给wid 命令。在 Objective-C 中,这将按照上面的示例提示完成:

其中 wrapper 是用于视频播放器的包装视图。但是,由于 swift 并不意味着使用指针,并且包装器视图是我理解的一种,我不知道如何将其翻译为 swift。

我尝试将 NSView 转换为UnsafePointer这样的

然后转换tintptr_torInt但这种转换不起作用。它说这个值不能转换为Int. 那么如何将视频播放器嵌入到快速视图中呢?

0 投票
1 回答
2516 浏览

ffmpeg - 如何使 mpv 与 mininterpolate 等 ffmpeg 过滤器更兼容?

ffmpeg 过滤器 mininterpolate(运动插值)在 MPV 中不起作用。

(尽管如此,该文件然后在没有 mininterpolate 的情况下正常播放)。

(我使用搜索引擎和整个文档进行了研究,并对使用 opengl 进行了故障排除,除了寻求帮助和学习更多地了解源代码之外,我通常尝试了所有方法,而且我不是程序员)......</p>

--gpu-context=angle --gpu-api=opengl也不能使opengl工作。(我猜 opengl 可以帮助查看它在文档中的使用)。

笔记

要获取可用视频过滤器的完整列表,请参阅 --vf=help 和 http://ffmpeg.org/ffmpeg-filters.html

另外,请记住,大多数实际过滤器都可以通过 lavfi 包装器获得,它使您可以访问大多数 libavfilter 的过滤器。这包括从 MPlayer 移植到 libavfilter 的所有过滤器。

大多数内置过滤器在某些方面已被弃用,除非它们仅在 mpv 中可用(例如处理 mpv 细节或仅在 mpv 中实现的过滤器)。

如果没有内置过滤器,将自动尝试 lavfi-bridge。本桥不支持帮助输出,在过滤器实际使用前不校验参数。尽管 mpv 语法与 libavfilter 的语法非常相似,但并不相同。(这意味着并非所有被 vf_lavfi 的图形选项接受的东西都会被 --vf 接受。)

您还可以在过滤器名称前加上 lavfi- 以强制包装。如果过滤器名称与已弃用的 mpv 内置过滤器冲突,这将很有帮助。例如 --vf=lavfi-scale=args 将使用 libavfilter 的比例过滤器而不是 mpv 已弃用的内置过滤器。

我希望 MPV 能够启用 mininterpolate(MPV 可以使用的几个过滤器之一,列在http://ffmpeg.org/ffmpeg-filters.html中)。但这就是发生的事情:

输入:"--vf=lavfi=[minterpolate=fps=60000/1001:mi_mode=mci]"

输出:

(有趣的是,它也 --gpu-api=opengl 不起作用(尽管根据规范我——不是吹牛——HD Graphics 400 Braswell 支持它的 4.2 版本)……而且这 aresample 似乎也没有效果,而且选择的少数音频过滤器通常不会播放' t 启动或输出错误。)

0 投票
1 回答
288 浏览

c++ - GTKmm Opengl 上下文未初始化

我正在尝试在 GTKmm 中创建一个视频播放器,为此我正在使用mpv。文档说,我可以使用 OpenGL 视图嵌入视频播放器。但是,我在 GTKmm 应用程序中实现播放器时遇到了困难。

我有一个 GLWindow,它包含一个 GLArea,然后应该包含视频播放器。问题是,当我尝试初始化 mpv 渲染上下文时,我收到一个错误,告诉我 OpenGL 未初始化。

以下是我拥有的主窗口的构造函数:

据我所知,这应该只是初始化视频播放器视图,但是当我尝试使用mpv_render_context_create. 我在该行收到以下错误:

[libmpv_render] glGetString(GL_VERSION) 返回 NULL。
[libmpv_render] OpenGL 未初始化。

然后应用程序以SIGSEGV信号终止。

问题可能出在我的get_proc_address函数上,目前我只为 linux 实现了它,它看起来像下面这样:

老实说,我对为什么没有创建 OpenGL 上下文感到不知所措。如何调整我的 GTKmm 应用程序以允许 mpv 视频播放器正确初始化?

0 投票
1 回答
1383 浏览

mpv - MPV:获取窗口位置和大小?还是窗口移动/调整大小的事件?

有没有办法获取 MPV 媒体播放器窗口的当前位置和大小(或更改时触发的事件)?


我正在尝试制作一个脚本来自动保存窗口的最后一个位置,然后在播放器启动时加载它。可以用 设置启动时的位置geometry,但不能读取。

在日志中,它会在窗口移动时记录:

并调整大小:

有没有办法在(javascript)脚本中获取这些值或回调?遗憾的是,我在文档中找不到该事件,或者我只是错过了它?

我能找到的只有dwidthdheight,但这些只代表视频的大小,而不是整个窗口,也不是它的位置。

谢谢!

注意:我也在mpv 的 github上问过这个问题,但还没有回复。当我得到答复时,我会更新另一个。

0 投票
0 回答
1763 浏览

video - 在本地网络中通过 udp 流式传输 mp4 的 ffmpeg 问题

我正在udp://232.255.23.23:1234使用 ffmpeg v3.4.2 从 linux(嵌入式)流式传输 mp4 视频文件(其中一些是之前使用 ffmpeg 转换为 mp4)到多个使用 MPV 播放流的 linux(antix)机器,所有这些都发生在本地网络,所以我希望它可以完美地工作,但不幸的是它没有。

以下是我尝试使用的原始命令:

ffmpeg

mpv

这似乎很有效,但是出现了一个问题,在显示端,流实际上比流内容本身长得多。mp4 文件总共有约 5 分 36 秒,而 mpv 在 >= 6 分钟内播放整个流循环。我认为这是由于丢帧、mpv 等待恢复或其他原因而发生的,因此会延长实际内容的长度。这在我的情况下不起作用,因为我有一个精确的时间间隔来显示流并且它不能比流内容长。所有内容均以 1680x800 分辨率制作,并以 1680x1050 分辨率显示在屏幕上(以 mpv 几何定位)

似乎将此命令用于mpv:

使持续时间正确,但这有时会在视频中引入巨大的伪影。

我读到使用-re流式传输会导致这些帧丢失,所以我尝试为文件输入和输出流设置静态数量的 fps,例如:

这会以本机帧速率读取文件并以 25fps 输出流,并且它似乎具有正确的计时持续时间,但它也会导致偶尔的articats,我认为整体质量更差。当其中一个工件发生时,mpv 的输出:

我也尝试在 mpv 中使用--untimedor ,但这会导致视频卡顿--no-cache

Invalid video timestamp在 MPV 中也经常收到警告,例如:Invalid video timestamp: 1.208333 -> -8.711667

--no-config在没有和添加的情况下播放 mpv--untimed也会导致频繁的伪影:

我尝试使用 ffplay 播放流,它还导致视频“播放”时间延长了 20 秒。有什么方法可以保持流媒体持续时间完整并防止那些巨大的伪影?这些不是任何巨大的视频文件,每个文件只有几 MB,一切都发生在本地网络中,因此延迟很小。

流式传输文件之一时从 ffmpeg 输出:

编辑:所有文件都不包含任何音频,因此网络上的流量应该更少

0 投票
1 回答
568 浏览

c# - 调用带有指向指针参数的指针的非托管函数

我正在尝试从我的 .Net Core 应用程序中调用 C 中的函数。为了深入了解,C 函数来自libmpv render.h,函数的头部如下所示:

问题是我不知道如何从 C# 调用该函数。所以我尝试了以下方法:

由于**res参数应该由函数更新,我认为这是有道理的。我试图用以下方法调用:

这给了我一个 AccessViolationException,事实上,每次我调用该mpv_render_context_create方法时,我都会得到相同的异常,所以当我说“它不起作用”时,我的意思是调用抛出了那个异常。

所以我想也许我必须把它变成一个 ref 参数:

调用它时导致相同的错误。

然后我读到另一个 stackoverflow 问题,我应该像下面这样传递裸 IntPtr:

但首先,它不再起作用,其次我怎么能从中得到结果?

那么我应该如何创建和调用该函数以便创建渲染上下文呢?

MpvRenderParam声明如下

MpvRenderParamType

更新

我已经考虑了 Mattias Santoro 提供的所有资源,我只是不完全确定如何将它们翻译成 C#,因为它是一种托管语言。我现在调用 mpv 函数的方法如下所示:

MpvOpenGlInitParams:_

可悲的是它仍然抛出同样的错误,我不确定我做错了什么,这真的很令人沮丧。

0 投票
0 回答
105 浏览

qt - 尝试使用 mpv 从浏览器空间中显示 H264 视频

我目前正在使用 MPV 显示视频的 QT 浏览器。对于个人事务,我需要在浏览器页面允许的表面之外显示视频。所以视频需要在页面底部进行剪切。由于某些原因,视频是由硬件视频加速推动的。

我尝试使用 mpv 命令启动视频:

几何参数定义了宽度 x 高度 + posX + posY。视频正在浏览器上显示,但视频的 posY 或 posX 似乎被推送以适合显示。

这是命令的日志:

我有 2 个不同的客户端,都使用 centOS 7。一个工作正常,但另一个不接受要切断的视频。这两个之间的主要区别是窗口管理器和 GPU: - 带有英特尔 GPU 的 Compiz 工作正常 - 带有 Nvidia GPU 的 Metacity 不起作用

导致 vdpau_video 报告错误并将视频从调用的几何图形中推出的问题可能是什么?

0 投票
1 回答
66 浏览

linux - gnome 登录后播放视频文件

我想在开始使用计算机时(以及登录 Gnome 后)自动查看视频剪辑。我如何在 Linux (Manjaro) 中做到这一点?我试图通过 Systemd 服务做到这一点,但我没有成功。这是我的 Systemd 服务文件: