2013年6月29日 星期六

Linux 下 IPC 的運作方式


IPC溝通的有許多方式,例如:Shared Memory, Message Queue, PIPE, FIFO, Unix Socket 等等。
下面將會整理 Linux 下常見的 IPC 的運作方式舉例。

ONVIF -- Event by RTSP Stream 實作探討

ONVIF 針對 Event 的傳送定義了三種方式,Basic Notification Interface,Real-time Pull-Point Notification Interface與 RTSP metadata stream 的方式。

由於實作 ONVIF 與 RTSP 的開發人員可能並不相同,因此在實作RTSP metadata stream時溝通可能會有誤解。以下對這種情況提出一種簡單的合作開發方式。

ONVIF:
當使用者想要建立一個 RTSP Stream 時,會先透過 GetStreamUri 詢問對應的 RTSP URI。
如果 GetStreamUri 的 Profile 內有定義 MetadataConfiguration,便表示後續使用者使用此 URI 建立 RTSP 時,RTSP 所回應的 SDP 內需要加入 metadata 的描述。 
可以使用 IPC 的方式來通知 RTSP 加入 metadata。此處假設使用 shared memory,設定 gIsMetadata = TRUE。

2013年6月28日 星期五

使用 WireShark 取出串流中的H.264封包,並進行撥放

以下將紀錄如何使用 wireshark 將串流中的封包取出,儲存為檔案之後,使其可利用一般播放器進行播放。


實驗步驟如下

1. 使用 wireshark 將封包存成 pcap

2. 使用 wireshark 打開儲存的 pcap 檔案

2013年6月12日 星期三

ONVIF -- Event Topics

I make a list of all event topics defined in ONVIF spec (version 2.3).

I don't remove the duplicate topic name,  so that we can know different usage for the specific topic name.


ONVIF-AccessControl-Service-Spec-v100.pdf
  • tns1:AccessControl/AccessGranted/
  • tns1:AccessControl/AccessTaken/
  • tns1:AccessControl/AccessNotTaken/
  • tns1:AccessControl/Denied/
  • tns1:AccessControl/Duress
  • tns1:AccessControl/Request/
  • tns1:AccessPoint/State/
  • tns1:Configuration/AccessPoint
  • tns1:Configuration/Area

2013年6月10日 星期一

台灣網路廣播電台列表

在實作網路收音機的過程中,需要許多的測試網址,因此整理出台灣現有的網路廣播電台,提供有需要的人參考。

要透過網頁直接收聽網路電台,建議直接使用以下兩個網址
1. hichannel
2. mediaU

為了方便程式可以直接引用內容,因此以下網址直接以 json 的格式呈現

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 進行封包接收與解碼。