顯示具有 ffmpeg 標籤的文章。 顯示所有文章
顯示具有 ffmpeg 標籤的文章。 顯示所有文章

2018年2月13日 星期二

2016年2月26日 星期五

HLS (HTTP Live streams) 介紹

許多可以在 iPad 上正常播放的影片,並無法直接串流到 AppleTV。為了讓老婆方便看影片,因此便想找個方法讓 影片能夠串流到 AppleTV,因此需要先研究一下 HLS 機制。

2014年1月20日 星期一

ffmpeg -- 使用 ffmpeg 命令降低 H.264 檔案大小

參考 x264EncodingGuide,使用裡頭的一個例子進行轉檔,以減少檔案大小。如下:
ABR (Average Bit Rate)
ffmpeg -i input -c:v libx264 -b:v 256k output.mp4 
轉好後的檔案的確降低 bitrate,但轉換後的檔案卻多出了 B-frame,如此可能會造成某些串流播放器播放時的困難。

以下記錄此問題的解決過程:

2013年11月5日 星期二

iOS -- 使用四分割畫面播放串流

此篇主要測試如何在iOS設備的螢幕上,將畫面進行四分割並各自分別播放影片

測試環境設定

2013年9月22日 星期日

FFMPEG -- WMA 轉換為 AAC 並存檔為 MP4

台灣地區的網路線上廣播,一般都是採用微軟的方式,其方法主要有兩個重點
  • 透過 MMS(Microsoft Media Server) 協定來傳送音樂
  • 使用 WMA(Windows Media Audio) 的格式來封裝音樂

2013年6月6日 星期四

FFMPEG -- 將 H.264 的資料封裝成 MP4 檔案

在開發 iphone 下的串流app時,需要一個將串流資料存成mp4檔案的功能,以下會紀錄此次實驗過程中遇到的問題與解決方法。

基本概念

透過下列的 3 個 FFMPEG API,將資料封裝成 mp4 格式。
  • av_write_header 
  • av_interleaved_write_frame 
  • av_write_trailer
想直接看程式的人,可以參考這個範例,想直接在 iphone下測試,可以下載我寫的一個簡單範例。 

2013年6月4日 星期二

FFMPEG -- 網路收音機實作

前幾天信箱中收到了一個問題,詢問如何接收網路上廣播的音樂,因此藉著這個機會研究了一下播放網路廣播的方法。


一般網路上常見的廣播電台有幾個性質

  • 使用 mms 協定 (mms://xxx.xx.xx.xx)
  • 使用 WMA codec


針對這兩個特性,常見的網路收音機有兩種實作方式:

  • 使用 libmms 接收封包,封裝成 AVPacket後再使用 FFMPEG 進行解碼。
  • 直接使用 FFMPEG 進行封包接收與解碼。

2013年5月22日 星期三

FFMPEG -- Save streaming data as image in iOS

近期需要在 iPhone 的串流應用程式加上擷取圖片的功能,將自己的實作經驗作一整理。

Step 1. 使用FFMPEG取得串流內的影像資料,並進行解碼
av_read_frame(pFormatCtx, &packet); avcodec_decode_video2(videoCodecCtx, DecodedFrame, &frameFinished, & packet);

2013年4月11日 星期四

FFMPEG --  在 iOS 設備上播放 AAC 音樂

使用 FFMPEG 顯示影像的功能已經完成,接著便是要進行播放音樂的工作了,此處我選擇播放的音樂檔案為 AAC 格式。以下介紹整個實作流程。

一、AAC 格式

參考維基百科,AAC 共有以下七種格式
  • audio/aac, 
  • audio/aacp, 
  • audio/3gpp, 
  • audio/3gpp2, 
  • audio/mp4, 
  • audio/MP4A-LATM, 
  • audio/mpeg4-generic

2013年4月10日 星期三

FFMPEG -- AAC 轉換為 WAV


最近撰寫程式,使用 ffmpeg 將 AAC檔案 轉為 WAV檔案,在實作過程中發現轉換後的聲音品質很差。
主要是因為ffmpeg解開AAC之後的格式與預期不同,因此需要做 resample 的動作。

造成問題原因:
ffmpeg 會將 AAC 解成 AV_SAMPLE_FMT_FLTP 格式 (32bits per sample)
但是製作 PCM 時所需要用的是 AV_SAMPLE_FMT_S16 格式 (16bits per sample),因此需要進行轉換

2013年4月6日 星期六

FFMPEG -- iPhone下的效能優化

近期需要使用 FFMPEG 在 iOS 設備下,因此對其效能優化作一討論。我的測試資料如下:
  • FFMPEG 版本為 Jan 27, 2013 
  • 測試程式使用 iFrameExtractor
  • 測試檔案使用的檔案為 http://mm2.pcslab.com/mm/7h800.mp4 (H.264 800kbs)
  • 測試設備為 iPad2

主要優化的目標是減少下列兩個行為的執行時間
  • Decode Frame
  • Scale and Render

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 與硬體加速器。

2013年2月5日 星期二

FFMEPG -- A ffmpeg and SDL Tutorial : tutorial08

參考 http://dranger.com/ffmpeg/tutorial08.html 進行實作練習,
以下附上一個可以在 ffmpeg 1.1.1 (build Jan 27 2013) 正確編譯的例子。

FFMEPG -- A ffmpeg and SDL Tutorial : tutorial07

參考 http://dranger.com/ffmpeg/tutorial07.html 進行實作練習,
以下附上一個可以在 ffmpeg 1.1.1 (build Jan 27 2013) 正確編譯的例子。

FFMEPG -- A ffmpeg and SDL Tutorial : tutorial06

參考 http://dranger.com/ffmpeg/tutorial06.html 進行實作練習,以下附上一個可以在 ffmpeg 1.1.1 (build Jan 27 2013) 正確編譯的例子。