2

我已经在 Linux 上安装了 ffmpeg 和 ffmpeg-devel 包。

Oracle 11g 已安装并正在运行。

数据库存储媒体文件,为了更好地流式传输,我们需要将它们转换为 AVI 格式。

为了便于集成,我们希望在数据库中进行这种转换。

现在,最简单的选择是为 ffmpeg 命令行实用程序编写一个包装器,并启用一个 PLSQL 过程来调用它。

但是,这将需要以下步骤:

  1. 阅读视频 BLOB
  2. 写入操作系统文件
  3. 调用 ffmpeg 包装器,给出来自 (2) 的文件名和输出文件名
  4. 将输出文件从 3 加载到 PLSQL 中的 BLOB

如果可能的话,我想编写一个 C 例程(使用 Oracle 外部库功能),它接受输入作为 BLOB(OciLOBLocator),调用呈现 LOB 的适当 libavformat 函数,并将返回写入 LOB(同样是 OciLOBLOcator)是 PLSQL 层然后用作 AVI 文件的内容。

这样做的另一个优点是它避免了从 Oracle 内部发出操作系统命令的不良影响。

我遇到的问题是,为 ffmpeg 提供的示例显示了对文件数据的处理,而我需要库来处理 LOB。

另一种方法是查看 Oracle 中的 OrdVideo 数据类型是否使用 setformat 和 process 进行这种转换。

4

1 回答 1

0

有趣的挑战。所以听起来您宁愿不必调用“ffmpeg”命令行实用程序,而是在数据库内的本机调用中利用 libavformat 和 libavcodec 库。我有这个权利吗?

我相信这些 LOBs/OciLOBLocator 东西暴露了一个用于读写的 C API?如果是这种情况,那么也许您可以基于该 API 创建一个新的 URLProtocol。URLProtocols 是 FFmpeg 处理 I/O 的方式。运行“ffmpeg -protocols”以查看所有已实现的协议。检查 libavformat/file.c 的源代码,以获取有关 URLProtocol 所需内容的简单示例——打开、读取、写入、查找、关闭和一些其他功能。

于 2012-05-01T17:09:20.207 回答