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

2012年4月28日 星期六

[Multimedia] Video format

傳送方式
  • 交錯(隔行)掃瞄 (interlace, abbr: i)
    • 早年廣播技術不發達,頻寬甚低時用來改善畫質的方法。
    • 是一種將圖像顯示在掃描式的顯示設備上的方法。
    • 在同樣幀率的情況下,這種方法比起逐行掃描引起的視覺閃爍比較小。
    • ex: NTSC, PAL, SECAM, 陰極射線管(CRT for Cathode Ray Tube)。
  • 循序掃瞄 (Progressive, abbr: P)
    • 是一種在顯示設備表示運動圖像的方法,這種方法將每幀的所有像素同時顯示(逐行掃描有時候被稱為非隔行掃描)。
    • 每次畫面更新時都會刷新所有的掃瞄線。
    • 此法較消耗頻寬但是畫面的閃爍與扭曲則可以減少。
    • 為了將原本為交錯掃瞄的視訊格式(如DVD或類比電視廣播)轉換為循序掃瞄顯示設備(如LCD電視,電漿電視等)可以接受的格式,許多顯示設備或播放設備都具備有去交錯的程序。但是由於交錯信號本身特性的限制,去交錯並無法達到與原本就是循序掃瞄的畫面同等的品質。
    • 常被用在計算機顯示器上。通常的顯示器的掃描方法都是從左到右從上到下,每秒鐘掃描固定的幀數(稱為幀率,例如60幀每秒)。

色彩
  • 色彩空間(Color Space)或色彩模型(Color model name)規定了視訊當中色彩的描述方式。
  • ex: NTSC 電視使用了 YIQ 模型,而 PAL 使用了 YUV 模型,SECAM 使用了 YDbDr 模型。
  • 在數位視訊當中,像素資料量(bits per pixel,簡寫為 bpp)代表了每個像素當中可以顯示多少種不同顏色的能力。由於頻寬有限,所以設計者經常藉由色度抽樣之類的技術來降低 bpp 的需求量。

H.263
  • 由 ITU-T 制定的視頻會議用的低碼率視頻編碼標準,屬於視頻編解碼器。
  • 最初設計為基於 H.324 的系統進行傳輸(即基於公共交換電話網和其它基於電路交換的網路進行視頻會議和視頻電話)。
  • 下一代視頻編解碼器是 H.264,或者叫 AVC 以及 MPEG-4 第10部分。由於 H.264 在性能上超越了 H.263 很多,現在通常認為 H.263 是一個過時的標準。

H.264/MPEG-4 AVC
  • 是由 ITU-T 視頻編碼專家組(VCEG)和 ISO/IEC 動態圖像專家組(MPEG)聯合組成的聯合視頻組(JVT,Joint Video Team)提出的高度壓縮數字視頻編解碼器標準。
  • JVT 編解碼器 (由於該標準是由 JVT 組織並開發的)
  • ITU-T 的 H.264 標準和 ISO/IEC MPEG-4第10部分(正式名稱是ISO/IEC 14496-10)在編解碼技術上是相同的,這種編解碼技術也被稱為 AVC(進階視訊編碼, Advanced Video Coding。
  • 標準第一版的最終草案已於2003年5月完成。
  • 此標準有以下稱呼來明確的說明它兩方面的開發者:
    • H.264/AVC
    • AVC/H.264
    • H.264/MPEG-4 AVC
    • MPEG-4/H.264 AVC

MPEG (通常指MPEG-1)
  • Moving Picture Experts Group。
  • 本來的含義是指一個研究視頻和音頻編碼標準的「動態圖像專家組」組織,成立於1988年,致力開發視頻、音頻的壓縮編碼技術,至今已經制定了MPEG-1、MPEG-2、MPEG-3、MPEG-4、MPEG-7等多個標準,。
  • 現在我們所說的 MPEG 泛指由該小組制定的一系列視頻編碼標準。
  • 是基於變換的有損壓縮。光學信號線經過採樣形成視頻信號,視頻信號基本的單位叫做影格,一個影格就是一個獨立的圖像,然後影格被分割成小塊做變換編碼,然後量化,最後進行熵編碼。
  • 與傳統影像編碼技術不同,MPEG 並不是每格影像進行壓縮,而是以一秒時段作為單位,將時段內的每一格影像做比較,由於一般視頻內容都是背景變化小、主體變化大,MPEG 技術就應用這個特點,以一幅影像為主圖,其餘影像格只記錄參考資料及變化數據,更有效記錄動態影像。從MPEG-1到MPEG-4,其核心技術仍然離不開這個原理,之間的分別主要在於比較的過程和分析的複雜性等。
  • MPEG 只規定位元流的格式與解碼精確度(即規定解碼的方法),而任何人可依照MPEG標準以不同方式實現編碼器(程式)。
  • 除了可減少因編碼專利造成的商業利益糾紛外,MPEG標準的主要目的在於確保不同的編碼器所產生的位元流可被其他解碼器正確的解碼,只要此位元流符合標準。

720p
  • 是一種視頻顯示格式。
  • 字母 p 意為逐行掃描(progressive scan),數字 720 則表示垂直方向有 720 條掃描線。
  • 通常畫面解析度為 1280 × 720,一般亦可稱為高畫質(HD)
  • 但有些情況下,如iPod Touch 4,其720P攝錄並不是指1280×720(16:9),而是960×720(4:3),故沒有註明是HD的720P攝錄並不是都指1280×720(16:9)。


新的高畫質電視(HDTV)解析度可達1920x1080p60,即每條水平掃瞄線有1920個像素,每個畫面有1080條掃瞄線,以每秒鐘60張畫面的速度播放。

* Reference
- 影片
- 隔行掃描
- 逐行掃描
- H.263
- MPEG
- H.264/MPEG-4 AVC
- JVT
- 720p
- 頗析 720p, 1080i 和 1080p

2012年3月11日 星期日

[AndroidMultimedia] Mediaplayer APIs

當在執行 MediaPlayer 中有錯,則會呼叫 OnErrorListener.onError()。


Prepared state
  • Preparing state is a transient state.
  • A MediaPlayer object must first enter the Prepared state before playback can be started.
  • When the preparation completes or when prepare() call returns, the internal player engine then calls a user supplied callback method, onPrepared() of the OnPreparedListener interface (setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener)).
  • While in the Prepared state, properties such as audio/sound volume, screenOnWhilePlaying, looping can be adjusted by invoking the corresponding set methods.
  • The call to prepare() can take a long time to execute, because it might involve fetching and decoding media data. So, you should never call it from your application's UI thread. 
    • To avoid hanging your UI thread, spawn another thread to prepare the MediaPlayer and notify the main thread when done. 
    • Convenient way to accomplish this task by using the prepareAsync() method. 


Start state
  • After start() returns successfully, the MediaPlayer object is in the Started state. isPlaying() can be called to test whether the MediaPlayer object is in the Started state.
  • While in the Started state, the internal player engine calls a user supplied OnBufferingUpdateListener.onBufferingUpdate()
    • This callback allows applications to keep track of the buffering status while streaming audio/video.
  • Note that the transition from the Started state to the Paused state and vice versa happens asynchronously in the player engine.


Stop state
  • Once in the Stopped state, playback cannot be started until prepare() or prepareAsync() are called to set the MediaPlayer object to the Prepared state again.


Play position


When the playback reaches the end of stream, the playback completes.
  • The looping mode(setLooping(boolean)):
    • True: the MediaPlayer object shall remain in the Started state.
    • False, the player engine calls a user supplied callback method, OnCompletion.onCompletion(), (setOnCompletionListener(OnCompletionListener)) The invoke of the callback signals that the object is now in the PlaybackCompleted state.
  • While in the PlaybackCompleted state, calling start() can restart the playback from the beginning of the audio/video source.


Permission
  • <uses-permission android:name="android.permission.INTERNET" />
  • <uses-permission android:name="android.permission.WAKE_LOCK" />


States
  • Create successful -> Idle -> setDataResource() -> Initialized -> prepare() or prepareAsync() -> Prepared -> start()/pause()/seekTo() -> Started/Paused/PlaybackCompleted
  • Error -> reset() -> Idle
  • Calling start()/pause()/stop() has not effect on a MediaPlayer object that is already in the Started/Paused/Stopped state.



* Reference
- MediaPlayer API
MediaPlayer State Diagram **
- MediaPlayer Guide
- media-formats
-  利用Android的MediaPlayer播放影片並動態調整影片畫面大小