2014年1月27日 星期一

RFC4747 -- NAT 的行為要求(UDP)

RFC4747 : Network Address Translation (NAT) Behavioral Requirements for Unicast UDP

此篇 RFC 提供了一些方法,說明當應用程式遇到不同類型的 NAT 時,應該如何處理UDP封包,才比較容易在NAT環境下運作無誤(NAT打洞容易成功)。例如線上遊戲或是視訊會議等應用程式。
The goals of this document are to define a set of common terminology for describing the behavior of NATs and to produce a set of requirements on a specific set of behaviors for NATs.

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,如此可能會造成某些串流播放器播放時的困難。

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

2014年1月19日 星期日

iOS -- 背景撥放音樂

iOS -- 背景撥放音樂

背景控制播放音樂的基本原理如下:
1. 將 app 設定為 FirstResponder 
2. 實作 UIResponder class 定義的 remoteControlReceivedWithEvent: 方法
   接收對應的 event 並進行處理,以下列舉幾個 event 當作例子 
UIEventSubtypeRemoteControlPlay
UIEventSubtypeRemoteControlPause
UIEventSubtypeRemoteControlStop
UIEventSubtypeRemoteControlTogglePlayPause
IEventSubtypeRemoteControlNextTrack
UIEventSubtypeRemoteControlPreviousTrack 
3. 透過 MPNowPlayingInfoCenter defaultCenter 設定鎖屏時顯示的資訊
   例如:[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo ];

網路上已經有很多程式範例了,茲將實作時參考到的程式碼紀錄如後

設定背景撥放音樂,並接收鎖屏時的 Play/Stop 按鍵以進行客製化的行為
修改鎖屏時所顯示的歌曲訊息文字與圖片

2014年1月17日 星期五

iOS -- 播放聲音的 API

在 iOS 設備上有許多播放聲音的方法,那麼應該選擇什麼樣的方式呢?
以下根據個人的經驗,分析不同情景下適用的處理方式。

iOS 可以使用數種方法播放聲音,根據用法的難易度,由簡單到困難列舉如下:
  • System Sound Service
  • AVAudioPlayer
  • AVPlayer
  • Audio Queue Service
  • OpenAL
  • Audio Unit
下圖為 Audio Framework,可由此得知不同方法之間的階層關係

使用 Darwin(QTSS) 架設串流伺服器

以下使用文字記錄使用 Darwin Streaming Server來當成串流伺服器的操作過程,此操作可以同時適用于Ubuntu 12.04 與 Mac OS 10.9.1。

使用 VLC 架設串流伺服器

以下使用文字記錄使用VLC來當成串流伺服器的操作過程。喜歡看圖的可以參考 William.L 所整理的SlideShare

1. 安裝 VLC 

sudo apt-get install ffmpeg
sudo apt-get install vlc

2014年1月13日 星期一

live555 -- 指定使用某張網路卡進行連線

當使用live555時,若系統內有多張網路卡,該如何指定使用哪張網路卡進行連線呢?
其實作法很簡單,說明如下:

2014年1月6日 星期一

Apple TV3 播放大陸影音網站

Apple TV 可以直接播放大陸影音網站所提供的影片,這功能真的很方便,而且速度也挺順的,以下將自己設定 Apple TV3的過程作一記錄。

2014年1月5日 星期日

iOS -- 如何處理撥放的聲音(音量大小、聲音路徑、特效)

當 iOS 設備可以正確的播放聲音之後,後續便可能需要對此聲音作些處理,例如:變更音量大小,設定音量從喇叭或是耳機輸出,或者對於此聲音做些特效。

2014年1月3日 星期五

iOS -- 程式中指定透過WIFI 或 3G 進行連線

在手機中使用3G上網往往需要較昂貴的費用,因此app開發者應該要讓使用者可以自由選擇透過3G或是WIFI上網。

要指定建立連線的網路介面,只要使用 bind 函數,指定對應的網路介面即可。在 iOS 中選擇 WIFI 或是 3G 也是同樣的道理,以iPhone為例,其網路介面名稱定義如下

  • WIFI 為 en0
  • 3G 為 pdp_ip0