- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试使用调用 ffmpeg 的 JAVE 将 *.mov 文件转码为 *.mp4 文件。输入文件和输出文件都是 InputStream 和 OutputStream 形式。这意味着我需要将 InputStream 和 OutputStream 作为 -i 和 -y 参数传递给 ffmpeg。我该怎么做?
//Read a movfile.mov converted into a FileInputStream
InputStream fileInputStream = getFileInputStream();
OutputStream fileOutputStream = new FileOutputStrea(outputMP4File) //Output
Process p = Runtime.exec("ffmpeg -i - -y -");
InputStream pInStrm = p.getInputStream();
OutputStream pOutStrm = p.getOutputStream();
int vin = 0, vout = 0;
Thread read = new Thread() {
byte[] buff = new byte[4096];
void run() {
while ((vin=fileInputStream.read(buf))!=-1) {
pOutStrm.write(buf, 0, vin);
}
}
}; read.start();
Thread write = new Thread() {
byte[] buff = new byte[4096];
void run() {
while ((vout=pInStrm.read(buf))!=-1) {
fileOutputStream.write(buf, 0, vout);
}
}
}; write.start();
但我不断收到“IOException:管道已关闭”错误。有人可以帮帮我吗?或者,如果有任何 JAVA API 可以执行此代码转换(在 Windows 和 RedHat Linux 上),那将非常有帮助
谢谢
最佳答案
那是行不通的。
请记住,JAVE 仅充当 ffmpeg 可执行文件的包装器,那就是你提供参数,比如目标编码、响度等,并且然后基本上告诉 JAVE 调用 fmpeg 并传递设置,你输入使用 Java 方法作为 ffmpeg 可执行文件的参数。
此步骤需要您指定的设置是1.可序列化2.已知为ffmpeg可执行文件
现在你可以争辩说至少有一些 InputStreams,比如 FileInputStream以某种方式可序列化,因为有一个低级文件描述符对应到这个 InputStream,但考虑一个 ByteArrayInputStream - 我不知道如何Java 在每个平台上实现,但我有点怀疑,是否有相应的文件描述符。
然而,关键的一点是,ffmpeg 可执行文件不应该也不应该不知道 InputStream 类型的 Java 对象是什么。它能做到的最好(至少在 posix 系统上)取一个整数(文件描述符 E)并尝试从中读取数据。然而,很多事情都可能出错,当使用文件描述符。例如,它可能是可搜索的,如果它是一个文件,例如与否,如果它实际上代表从套接字读取的数据。
很高兴,在 Posix 系统上,每个进程至少有 3 个文件描述符,即 STDIN、STDOUT 和 STDERR。这对应于一个概念,您可以从一个进程到另一个进程的管道输入/输出。我不知道这是否或如何工作在 Windows 上,但在 OSX 或 Linux 上,您可以将数据通过管道传输到 ffmpeg 可执行文件中。这个实际上意味着,您指示 ffmpeg 从 STDIN 文件描述符中读取。
遗憾的是,JAVE并没有实现ffmpeg的这个特殊特性,也就是说,有没有方法,将数据通过管道传输到 ffmpegs STDIN。
FWIW。您可以编写一些 native (c/c++) 代码并传递一个 Java 对象“DecodeFeed”,使用JNI ( http://en.wikipedia.org/wiki/Java_Native_Interface ) 包含一个 Inputstream和一个输出流
您必须编写的 native 代码可以包含 ffmpeg 源代码并使用它们解码/转码从 DecodeFeed.in 读取的输入,然后写回DecodeFeed.out.
我是在一个Android项目中做的,你可能想看看以供引用。 https://github.com/fscz/FFmpeg-Android
或者,您可以派生 JAVE 并自己实现此功能。正如您可能知道的那样,Java 提供了一种通过调用来运行可执行文件的方法运行时.exec。此调用将返回 Process 类的一个实例,该实例提供 Process.getOutputStream。如果您写入此 Outputstream,您实际上写入刚刚创建的进程的 STDIN。
参见 http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html有关如何生成和写入进程的文档。
并查看 http://ffmpeg.org/ffmpeg.html对于可用的命令行选项(包括从 STDIN 读取)对于 ffmpeg。
关于java - 将FileInputStream和FileOutputStream传给ffmpeg进行转码(使用JAVE-Java音视频编码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9345678/
我对此很陌生,我在这里的论坛上检查过答案,但我没有找到任何真正可以帮助我的答案。我正在尝试播放 res/raw 文件夹中的视频。到目前为止我已经设置了这段代码: MediaPlayer mp; @Ov
我可以播放一个视频剪辑,检测视频的结尾,然后创建一个表单,然后播放另一个视频剪辑。我的问题是,表单 react 不正确,我创建了带有提交按钮和两个单选按钮可供选择的表单。我希望让用户进行选择,验证响应
首先,我必须说我在web2py讨论组中看到过类似的内容,但我不太理解。 我使用 web2py 设置了一个数据库驱动的网站,其中的条目只是 HTML 文本。其中大多数将包含 img和/或video指向相
我正在尝试在视频 View 中播放 YouTube 视频。 我将 xml 布局如下: 代码是这样的: setContentView(R.layout.webview); VideoV
我正在开发一个需要嵌入其中的 youtube 视频播放器的 android 应用程序。我成功地从 API 获得了 RTSP 视频 URL,但是当我试图在我的 android 视频 View 中加载这个
我目前正在从事一个使用 YouTube API 的网络项目。 我完全不熟悉 API。所以每一行代码都需要付出很多努力。 使用以下代码,我可以成功检索播放列表中的项目: https://www.goog
是否可以仅使用视频 ID 和 key 使用 API V3 删除 youtube 视频?我不断收到有关“必需参数:部分”丢失的错误消息。我用服务器和浏览器 api 键试了一下这是我的代码: // $yo
所以我一直坚持这个大约一个小时左右,我就是无法让它工作。到目前为止,我一直在尝试从字符串中提取整个链接,但现在我觉得只获取视频 ID 可能更容易。 RegEx 需要从以下链接样式中获取 ID/URL,
var app = angular.module('speakout', []).config( function($sceDelegateProvider) {
我正在努力从 RSS 提要中阅读音频、视频新闻。我如何确定该 rss 是用于新闻阅读器还是用于音频或视频? 这是视频源:http://feeds.cbsnews.com/CBSNewsVideo 这是
利用python反转图片/视频 准备:一张图片/一段视频 python库:pillow,moviepy 安装库 ?
我希望在用户双击视频区域时让我的视频全屏显示,而不仅仅是在他们单击控件中的小图标时。有没有办法添加事件或其他东西来控制用户点击视频时发生的情况? 谢谢! 最佳答案 按照 Musa 的建议,附
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 7年前关闭。 Improve this questi
我有一个公司培训视频加载到本地服务器上。我正在使用 HTML5 的视频播放来观看这些视频。该服务器无法访问网络,但我已加载 apache 并且端口 8080 对同一网络上的所有机器开放。 这些文件位于
我想混合来自 video.mp4 的视频(时长 1 分钟)和来自 audio.mp3 的音频(10 分钟持续时间)到一个持续时间为 1 分钟的输出文件中。来自 audio.mp3 的音频应该是从 4
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 8年前关闭。 Improve this questi
我正在尝试使用 peer/getUserMedia 创建一个视频 session 网络应用程序。 目前,当我将唯一 ID 发送到视频 session 时,我能够听到/看到任何加入我的 session
考虑到一段时间内的观看次数,我正在评估一种针对半自动脚本的不同方法,该脚本将对视频元数据执行操作。 简而言之,只要视频达到指标中的某个阈值,就说观看次数,它将触发某些操作。 现在要执行此操作,我将不得
我正在通过iBooks创建专门为iPad创建动态ePub电子书的网站。 它需要支持youtube视频播放,所以当我知道视频的直接路径时,我正在使用html5 标记。 有没有一种使用html5 标签嵌入
我对Android不熟悉,我想浏览youtube.com并在Webview内从网站显示视频。当前,当我尝试执行此操作时,将出现设备的浏览器,并让我使用设备浏览器浏览该站点。如果Webview不具备这种
我是一名优秀的程序员,十分优秀!