关于 Java 调用外部命令的疑惑,希望有大佬可以指点迷津。。

2020-08-05 09:10:06 +08:00
 evilrat

如下: https://kongzheng1993.github.io/2020/08/04/kongzheng1993-java%E8%B0%83%E7%94%A8%E5%A4%96%E9%83%A8%E7%A8%8B%E5%BA%8F/

2635 次点击
所在节点    Java
10 条回复
wysnylc
2020-08-05 10:22:35 +08:00
最近我也在搞媒体处理格式转换,但是用阿里的 api
自己做性价比低而且扩展麻烦,阿里的还挺便宜的
yuhangch
2020-08-05 11:12:15 +08:00
之前也碰到了类似的问题,第一次运行正常,第二次卡住,后来,我是手动把缓冲区读出来解决的,也想听大佬聊聊究竟什么原因
evilrat
2020-08-05 13:34:27 +08:00
@wysnylc 传统行业,唉。。不过不自己做,还不知道这块有这么个问题。。
d460686680
2020-08-05 16:30:06 +08:00
用 ProcessBuilder 组装 command,每次任务重新开个线程。
fivesmallq
2020-08-05 18:45:38 +08:00
aguesuka
2020-08-06 08:11:33 +08:00
做过 java 调 ffmpeg 项目,把输出流和错误流重定向一个流,然后不停读就可以了。
evilrat
2020-08-07 09:19:45 +08:00
@d460686680 开一个新的线程为什么可以呢?每次请求接口,不都是一个新的线程么,去调用 ffmpeg 不都会新建一个系统级的进程么。两个请求,就是两个线程,两个线程分别调用 ffmpeg 新建系统进程,怎么就会互相影响呢?
evilrat
2020-08-07 09:21:26 +08:00
@aguesuka 我启动应用后,第一次调用是可以正常返回的,而且代码里调用了 process.waitFor(),也就是线程会等待 ffmpeg 进程结束才会继续往下走,接口正常返回,说明没有发生输出流错误流阻塞的问题。第二个请求怎么就不行了呢。。。还请指点
evilrat
2020-08-07 09:23:30 +08:00
@fivesmallq 我是不懂为什么新建线程去调用 ffmpeg 就可以。。。我理解的每次调用接口都是一个新的线程,独立的线程分别去调 ffmpeg,会建立各自的系统级进程吧,为啥会互相影响呢?
aguesuka
2020-08-07 13:06:11 +08:00
@evilrat 第一个请求 inputstream 的 buffer 没满,满了以后 ffempg 的打印就阻塞了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/695702

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX