2013年3月12日 星期二

轉載 ARM compiler shoot-out for ffmpeg

FFMPEG 的編譯參數,與各種編譯器編譯後的效能比較
轉載自 http://hardwarebug.org/2009/08/05/arm-compiler-shoot-out/


2013年3月11日 星期一

FFMPEG -- Source Code 學習心得

近期想要在 iOS 設備上開發一個可以正確撥放串流的軟體,為了快速開發,將會使用許多Open Source,鑒於許多軟體都直接使用 FFMPEG ,因此將對此 Open Source 作一研究。

摘錄FFmpeg介紹如下:
FFmpeg是一個自由軟體,可以執行音訊和視訊多種格式的的錄影、轉檔、串流功能,包含了libavcodec ─這是一個用於多個專案中音訊和視訊的解碼器函式庫,以及 libavformat ——一個音訊與視訊格式轉換函式庫。
針對我的用途,需要了解的應該著重於libavcodec,並且需要特別針對其中 MJPEG, MPEG4, H.264這三種codec。以下分篇介紹與 ffmpeg 有關的研究心得。

2013年3月7日 星期四

FFMPEG -- 如何得知平台是否支援硬體加速?


在移植 FFMPEG 時心裡一直有個疑問,該如何得知 FFMPEG 所移植的平台是否支援硬體加速呢?若 FFMPEG 函數庫本身可以直接使用機器上的硬體加速,這樣是不是就不需要擔心 decode/encode 的速度了。

FFMPEG -- 直接撥放記憶體內的資料


直接播放記憶體內的 video 是一個很方便的技巧,例如:我們可以從網路上持續的接收串流資料,放置在記憶體內,再要求ffmpeg播放記憶體內的資料。
參考 http://stackoverflow.com/questions/9604633/reading-a-file-located-in-memory-with-libavformat
其實作方式是註冊自行撰寫的 readFunction, 用來讀取放在記憶體中的 video data。

下列程式碼是在 iFrameExtractor project 上所作的修改,
我將一個小尺寸的影像檔直接放到記憶體中,然後要求 ffmpeg 直接讀取此段記憶體進行影像播放,
預期此作法應該可以減少 I/O 的時間,實際測試結果後也的確是如此。

FFMPEG -- 基本的API用法


FFMPEG -- 基本的API用法

若要使用 FFMPEG 播放影像,可遵照以下步驟取得 frame,接著將 YUV影像轉換為 RGB,使用 imageView 顯示影像。
若要加速顯示速度,則可以使用 SDL 或 OPENGL ES 直接繪製 YUV 影像。

FFMPEG API 的使用方式:

1. void avcodec_register_all(void)
註冊 codec 與硬體加速器。

OpenGL ES 網上學習資源


在 iPad 上使用 ffmpeg 顯示 Video畫面時,想要使用 GPU 的硬體加速功能。找了許多文章都建議使用 OpenGL ES,並且建議參考 2011 WWDC 的 ChromaKey sample code。但對於不懂 Open GL 的入門者而言,直接看 ChromaKey 真的有點困難。建議先學習基本的OPEN GL ES,接著再看 ChromaKey sample。

下面收集了相關的網路連結。

2013年3月4日 星期一

網路上提供測試 RTSP 的伺服器

網路上找到的 RTSP Server,在開發初期,可用來測試 Streaming 是否正常。

1. rtsp://quicktime.tc.columbia.edu:554/users/lrf10/movies/sixties.mov


2. https://sites.google.com/site/kjkaohome/home
此網頁提供了很多範例,但可能不是每個都能夠執行,我測試過https://sites.google.com/site/kjkaohome/hdx720/pcslab 內的連結是沒問題的。