2012-05-01 44 views
2

我在Linux上安裝了ffmpeg和ffmpeg-devel軟件包。從Oracle調用ffmpeg api

Oracle 11g已安裝並正在運行。

數據庫存儲媒體文件,爲了獲得更好的流媒體效果,我們需要將它們轉換爲AVI格式。

爲便於集成,我們希望在數據庫中進行這種轉換。

現在,最簡單的選擇是爲ffmpeg命令行實用程序編寫一個封裝器,並啓用PLSQL過程來調用它。

但是這需要以下步驟:

  1. 讀取視頻BLOB
  2. 寫入OS文件
  3. 呼叫ffmpeg的包裝給人由式(2)和輸出文件名
  4. 加載文件名輸出文件從3到PLSQL中的BLOB

我想盡可能寫一個C例程(使用Oracle Externa l庫函數),它將輸入作爲BLOB(OciLOBLocator)接受,調用相應的呈現LOB的libavformat函數,並將返回信息寫入LOB(再次是OciLOBLOcator),PLSQL層將其用作AVI文件。

這樣做的另一個好處是避免了從Oracle內部發布操作系統命令的不良影響。

我遇到的問題是給出的ffmpeg示例顯示了來自文件的數據處理,而我需要庫來處理LOB。

另一種方法是查看Oracle中的OrdVideo數據類型是否使用setformat和process來進行這種轉換。

回答

0

有趣的挑戰。所以這聽起來像你不想調用'ffmpeg'命令行工具,而是在數據庫中的本地調用中利用libavformat和libavcodec庫。我有這個權利嗎?

我相信這些LOBs/OciLOBLocator的東西暴露了C API的讀寫能力嗎?如果是這種情況,那麼也許你可以創建一個基於該API的新URLProtocol。 URLProtocols是FFmpeg處理I/O的方式。運行'ffmpeg -protocols'來查看所有實現的。檢查libavformat/file.c的源代碼,瞭解URLProtocol需要的一個簡單示例 - 打開,讀取,寫入,查找,關閉以及其他一些功能。

+0

邁克,謝謝你的迴應。是的,你是對的,這正是我想要做的。從數據庫中剔除操作系統命令會讓人們緊張,並且很難通過DBA警察。 我會查看該URL協議選項,並將在此處反饋我的發現。 – TenG

+0

對這個問題仍然沒有有用的迴應。 – TenG

+0

你仍然沒有在這裏反饋你的發現。這可能是你開創新局面的其中一件事。您是否嘗試過我的答案中概述的LOB/OciLOBLocator選項。我可能已經嘗試過了,但是,好吧......我並沒有真正安裝Oracle安裝。 –