2013年12月26日 星期四

iPad Air 入手

還記得 iPad 2 在台灣發售的那天,早上七點多就趕到燦坤門口排隊,中午就買到iPad2,當時心情真的好 High ~。

一晃眼就快三年了,雖然iPad2還是頭好壯壯,但看到又輕又薄的 iPad Air上市,還是好想要哦,反正 iPad2 可以送給家人用,不會浪費,那就衝吧。

這次台灣上市,因為上班沒時間去排隊,就直接上官網訂了。其實Apple商品的出貨速度算挺快的,16號早上十點多訂貨,18號出貨,從深圳寄到台北,20號就到家了,看mobile01討論區,還有人更早拿到iPad Air的。摘錄 TNT 的貨件追蹤資料如下:
日期時間地點貨件狀態
20 Dec 2013 15:08:59 Taipei City 貨件完成送達 
20 Dec 2013 07:37:00 Taipei City 貨件將被帶出遞送 
19 Dec 2013 19:34:01 Taipei City 站所收到貨件 
19 Dec 2013 19:34:01 Taipei City 貨件轉由合作廠商運送 
19 Dec 2013 17:05:00 Taipei City 理貨 
18 Dec 2013 23:34:16 Hong Kong 理貨 
18 Dec 2013 16:56:00 Shenzhen 原產地發貨 
18 Dec 2013 16:46:41 Shenzhen 理貨 
18 Dec 2013 00:08:37 Shenzhen 取件完成

用了一小時候的心得:

Retina螢幕太清楚了,用過之後,再回頭看 iPad2的螢幕,真的覺得這錢花的值得。

跟iPad2比較,真的好輕,不過我一手拿iPad Air,一手拿iPad mini retina,兩個重量還是有點差,iPad mini retina感覺不到重量,iPad Air拿一個小時手還是會有感覺。

透過 AirPlay 用 Apple TV 撥影片,感覺好像變得更順了,不知道是不是錯覺,哈~。

下次買Apple的產品,我可能還是會上網直接訂,有問題可以直接退貨這點,讓我很放心。




同時買了 iPad Air 與 iPad mini retina,
這個月要省點花囉



Wi-Fi 64G 無誤


開箱~ YA~

按鈕顏色一致,小細節都有注意到

moshi VersaCove 保護殼 


觀賞角度


打字角度


閱讀角度





2013年12月25日 星期三

Install DHCP server on ubuntu 12.04

Below list the procedures to setup DHCP server on ubuntu 12.04 for my machine.

1. install DHCP server
sudo apt-get install isc-dhcp-server

Configuration of Restricted NAT


Here I provides two example to setup the Address-Restriced NAT in ubuntu 12.04 by using iptables and ipset.

1. for a fixed client ip address
 1    iptables -t nat -A POSTROUTING -p UDP -o $EXTIF -j SNAT --to-source 
 2    $EXTIP
 3    iptables -t nat -A PREROUTING -i $EXTIF -j DNAT --to-destination 
 4    $CLIENTIP
 5    iptables -A FORWARD -i $EXTIF -j DROP
 6  
 7    ipset -N RES_CONDITION ipporthash -exist
 8    ipset flush RES_CONDITION
 9    iptables -A FORWARD -o $EXTIF -j SET --add-set RES_CONDITION dst,
10    src
11    iptables -I FORWARD 1 -i $EXTIF -m set --match-set RES_CONDITION 
12    src,dst -j ACCEPT


Reference:
  • iptables usage
  • ipset usage

2013年12月19日 星期四

[轉] container_of 宏的說明

原文地址:container_of()宏 作者:迷墙人

在学习Linux驱动的过程中,遇到一个宏叫做container_of。
该宏定义在include/linux/kernel.h中,首先来贴出它的代码:

apt-get install 時發生 fqdn 的錯誤解決方式

使用 sudo apt-get install xxxx 時,總是會出現下列錯誤訊息
Your system needs to have a fully qualified domain name (fqdn) in
order to install the var-qmail packages. 
Installation aborted. 
dpkg:在處理 qmail (--configure) 時發生錯誤:
 子程序 installed post-installation script 傳回了錯誤退出狀態 1
dpkg:因相依問題,不能設定 qmail-run:
 qmail-run 相依於 qmail (>= 1.06-2.1)﹔然而:
  qmail 套件尚未設定。
dpkg:在處理 qmail-run (--configure) 時發生錯誤:
 相依問題 - 保留為未設定
No apport report written because the error message indicates its a followup error from a previous failure.

問題原因在於系統沒有設定 FQDN,因此只要參考 /etc hostname 定義的名稱,修改 /etc/hosts,加入對應的 FQDN 即可。舉例如下:
/etc/hostname 的內容
albert-VirtualBox
/etc/hosts 的內容
127.0.0.1 albert-VirtualBox.haha.com albert-VirtualBox

修改完成後,記得要先使用 "hostname -f" 確認是否修改成功。


若仍是有問題,便重新安裝 qmail 吧,如下
sudo apt-get clean
sudo apt-get remove --purge qmail
sudo apt-get update
sudo apt-get install qmail

參考資料
  1. http://superuser.com/questions/511258/cannot-install-show-because-of-fqdn
  2. http://omoabobade.wordpress.com/tag/error-processing-qmail-run/

2013年12月16日 星期一

NAT Router 架設實驗記錄

以下將架設 NAT router 的過程作一記錄。

1. 首先準備一台有兩張網卡的電腦。
最方便的作法便是直接拿台Notebook,同時有wired與wireless。

2. 安裝軟體
先安裝 VM (此處我使用VirtualBox),並在 VM上安裝 ubuntu 12.04,接著要針對此 VM 分別新增兩張網路卡,一個與內網溝通,一張與 Internet溝通。網路的配置如下:


2013年12月13日 星期五

Virtual x86

http://copy.sh/v24/ 是一個使用 JAVAScript 來模擬作業系統的網頁,可以用來模擬 Linux, Dos, Windows, FreeBSD。並且在 github 提供了實作的原始碼。

模擬網路狀態,封包延遲與封包丟棄

以下為一個模擬網路狀態的script,可以模擬封包延遲與丟棄封包,並限制上下傳頻寬

2013年12月11日 星期三

[轉] iptables中snat和MASQUERADE的区别

轉載自 http://yhqlzz.blog.51cto.com/2557314/1019755,作者為 yanghaiquanyyy

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://yhqlzz.blog.51cto.com/2557314/1019755
iptablessnat和MASQUERADE的区别
  解决方案
  iptables中可以灵活的做各种网络地址转换(NAT)
  网络地址转换主要有两种:snatDNAT
  snat是source network address translation的缩写
  即源地址目标转换
  比如,多个PC机使用ADSL路由器共享上网
  每个PC机都配置了内网IP
  PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip
  当外部网络的服务器比如网站web服务器接到访问请求的时候
  他的日志记录下来的是路由器的ip地址,而不是PC机的内网ip
  这是因为,这个服务器收到的数据包的报头里边的“源地址”,已经被替换了
  所以叫做snat,基于源地址的地址转换
  DNAT是destination network address translation的缩写
  即目标网络地址转换
  典型的应用是,有个web服务器放在内网配置内网ip,前端有个防火墙配置公网ip
  互联网上的访问者使用公网ip来访问这个网站
  当访问的时候,客户端发出一个数据包
  这个数据包的报头里边,目标地址写的是防火墙的公网ip
  防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip
  然后再把这个数据包发送到内网的web服务器
  这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了
  即DNAT,基于目标的网络地址转换
  MASQUERADE,地址伪装,在iptables中有着和snat相近的效果,但也有一些区别
  但使用snat的时候,出口ip的地址范围可以是一个,也可以是多个,例如:
  如下命令表示把所有10.8.0.0网段的数据包snat成192.168.5.3的ip然后发出去
  iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j snat --to-source 192.168.5.3
  如下命令表示把所有10.8.0.0网段的数据包snat成192.168.5.3/192.168.5.4/192.168.5.5等几个ip然后发出去
  iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j snat --to-source 192.168.5.3-192.168.5.5
  这就是snat的使用方法,即可以NAT成一个地址,也可以NAT成多个地址
  但是,对于snat,不管是几个地址,必须明确的指定要snat的ip
  假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变
  而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址
  这个时候如果按照现在的方式来配置iptables就会出现问题了
  因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的
  每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip
  这样是非常不好用的
  MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT
  比如下边的命令:
  iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
  如此配置的话,不用指定snat的目标ip了
  不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做snat出去
  这样就实现了很好的动态snat地址转换
本文出自 “欢迎光临yhqlzz博客” 博客,请务必保留此出处http://yhqlzz.blog.51cto.com/2557314/1019755

2013年12月3日 星期二

AirPlay 測試心得

最近使用 PPS 播放影音時,無法與 Apple TV 進行 airplay,印象中之前是可以的,趁著今晚有空,針對 AirPlay 的互通性進行以下測試。

AirPlay 原理


基本概念


AirPlay 是一個用來與 Apple TV溝通的協定,可用 iOS 設備或 itunes將資料交給 Apple TV進行播放,其實作使用 Multicast DNS, HTTP, RTSP, RTP or NTP 等協定,並加上些許的修改。

2013年11月15日 星期五

高速公路路況即時影像的作法

有點好奇高速公路路況即時影像的作法,因此捉了封包進行分析,結論如下:

1. 測試網址為
http://www.1968.com.tw/modules/CCTVeasy.aspx?cctv_id=nfbCCTV-N2-W-10.650-M

2013年11月14日 星期四

IP cameras default password

有時候會需要測試多家不同的ipcam
以下收集 ipcam 出廠時的預設帳號/密碼,方便查找

資料來源為 Google 與 http://ipvm.com/report/ip_cameras_default_passwords_directory


  • ACTi: admin/123456 or Admin/123456
  • APPRO: admin/9999
  • Arecont Vision: none
  • Avigilon: admin/admin
  • AVTECH: admin/admin
  • Axis: traditionally root/pass, new Axis cameras require password creation during first login
  • Basler: admin/admin
  • Blueeyes: root/pass
  • Bosch Dinion: none
  • Brickcom: admin/admin
  • Cisco: No default password, requires creation during first login
  • COMPRO: admin/admin
  • Dahua: admin/admin
  • DVTel: admin/1234
  • Edimax: admin/1234
  • FLIR: admin/fliradmin
  • Grandstream: admin/admin
  • Hikvision: admin/12345
  • Honeywell: administrator/1234
  • IQinVision: root/system
  • IPX-DDK: root/admin or root/Admin
  • IPUX: admin/admin
  • Mobotix: admin/meinsm
  • Panasonic: admin/12345
  • Pelco Sarix: admin/admin
  • Pixord: admin/admin
  • QNAP: admin/admin
  • Samsung Electronics: root/root or admin/4321
  • Samsung Techwin (old): admin/1111111
  • Samsung Techwin (new): admin/4321
  • Sanyo: admin/admin
  • Scallop: admin/password
  • Sentry360 (mini): admin/1234
  • Sentry360 (pro): none  
  • Sony: admin/admin
  • Stardot: admin/admin
  • Starvedia: admin/, admin/ipcam
  • Trendnet: admin/admin
  • Toshiba: root/ikwd
  • Tups: admin/
  • VARCON: admin/admin, admin/9999
  • VideoIQ: supervisor/supervisor
  • Vivotek: root/
  • Ubiquiti: ubnt/ubnt

如何移動 MP4 "moov atom" 到檔案的開始部分

使用 RTSP 接收 H.264+ACC 的資料,並透過 ffmpeg 將此檔案寫入 MP4,此時 ffmpeg 會持續寫入 H.264 與 AAC 的資料,並在使用者停止寫入時,才將 MP4 的 moov atom 放在檔案結尾,此情況可能會造成某些撥放器無法正確撥放此 MP4。

若將 MP4 moov atom 移動到檔案開始部分,便可以解決此問題。

ffmpeg 提供了一個工具 qt-faststart 用來解決此問題。

以下簡單介紹其用法
編譯並安裝至系統目錄
   cd ffmpeg
   ./configure
   make tools/qt-faststart
   sudo cp tools/qt-faststart /usr/bin/
   $which qt-faststart
   /usr/bin/qt-faststart 
使用方式
   Usage: qt-faststart

 
Reference:

  1. http://www.ffmpeg.org/doxygen/1.0/qt-faststart_8c-source.html
  2. http://stackoverflow.com/questions/8061798/post-processing-in-ffmpeg-to-move-moov-atom-in-mp4-files-qt-faststart
  3. MP4 Reader

2013年11月5日 星期二

如何在系統開機或關機時通知網路上的其他機器

許多系統偵測的協定,都定義需在系統開機以及將關機時,透過網路送出訊息通知周遭的設備。
例如:WS-Discovery spec 定義,開機時應該送出 Hello,關機時應該送出 Bye。

那麼如何讓系統在開關機時,呼叫程式,作對應的處理?

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

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

測試環境設定

2013年10月17日 星期四

檢查某個 process 的記憶體使用量

在 Linux 下檢查某個 process 記憶體用量的方法。
基本原則是檢視 /proc/$pid/smaps 的內容,以下提供一個簡單的Script。

 1 #!/bin/bash
 2 
 3 pid=$1
 4 if [ -f /proc/$pid/smaps ]; then
 5       echo "* Mem usage for PID $pid"
 6       echo "-- Size:"
 7       cat /proc/$pid/smaps | grep -m 1 -e ^Size: | awk '{print $2}'
 8       echo "-- Rss:"
 9       cat /proc/$pid/smaps | grep -m 1 -e ^Rss: | awk '{print $2}'
10       echo "-- Pss:"
11       cat /proc/$pid/smaps | grep -m 1 -e ^Pss: | awk '{print $2}'
12       echo "Shared Clean"
13       cat /proc/$pid/smaps | grep -m 1 -e '^Shared_Clean:' | awk '{
14       print $2}'
15       echo "Shared Dirty"
16       cat /proc/$pid/smaps | grep -m 1 -e '^Shared Dirty:' | awk '{
17       print $2}'
18 fi

參考資料:

2013年10月16日 星期三

TimeZone 介紹

為了要判斷所收到的 timezone 是否是一個合法的 timezone,故將 timezone 格式整理如下,以利快速參考。

在一個 POSIX 系統,Timezone 會儲存於 TZ 環境變數,並且定義三種格式以表示 timezone。但 POSIX.1 標準只描述了前兩種表示方法。

如何由收到的封包得知是 unicast 或是 multicast ?

ONVIF 使用 WS-Discovery 作為其尋找設備的規範,並且對Discovery作了點小修改。
其中主要的差異便是針對 unicast/multicast probe,其錯誤處理不同。 

  • 當收到 multicast probe時,若發現此封包有任何錯誤時,都不回錯誤。 
  • 當收到 unicast probe時,若發現此封包的 MatchBy 有錯誤時,需回錯誤。 

2013年10月14日 星期一

[轉] The C10K problem 翻譯

原文地址:The C10K problem翻译 作者:bjpiao
The C10K problem翻译
The C10K problem
如今的web服务器需要同时处理一万个以上的客户端了,难道不是吗?毕竟如今的网络是个big place了。
现在的计算机也很强大了,你只需要花大概$1200就可以买一个1000MHz的处理器,2G的内存, 1000Mbit/sec的网卡的机器。让我们来看看--20000个客户,每个为50KHz,100Kbyes和 50Kbit/sec,那么没有什么比为这两万个客户端的每个每秒从硬盘读取4千字节然后发送到网络上 去更消耗资源的了。可以看出硬件不再是瓶颈了。 (That works out to $0.08 per client, by the way. Those $100/client licensing fees some operating systems charge are starting to look a little heavy!)
在1999年最繁忙的ftp站点,cdrom.com,尽管有G比特的网络带宽,却也只能同时处理10000个 客户端。在2001年,同样的速度可以被几个ISP服务商所提供,他们预期该趋势会因为大量的商业 用户而变得越来越普遍。
目前的瘦客户端模型也开始又变得流行起来了--服务器运行在Internet上,为数千个客户端服务。
基于以上一些考虑,这里就配置操作系统或者编写支持数千个网络客户端的代码问题提出一些 注意点,该论题是基于类Unix操作系统的--该系统是我的个人爱好,当然Windows也有占有一席之地。

2013年10月1日 星期二

H.264 sps/pps online parser

Input SPS/PPS in base64 encoded form, and press go.Then you can get the detail information of SPS/PPS.


Test Now
SPS:
PPS:

H.264 sps/pps parser

I write a simple javascript to parse sps/pps.

If you are interested the implementation, you can find the source code in my github.

Usage
  1. Download the html from here 
  2. Use browser to open the html
  3. Input sps and pps
  4. Press go and then the result will show in the same pages

2013年9月22日 星期日

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

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

2013年9月18日 星期三

ONVIF -- WS-Discovery spec

WS-Discovery 全名為 Web Service Dynamic Discovery

本篇將針對 WS-Discovery spec 作一整理,並介紹 ONVIF 使用 WS-Discovery 時,需做的一些變更,另外此處也介紹該如何使用 gSOAP 來進行實作。

一、WS-Discovery 定義三個角色

  • Client
  • Target Service
  • Discovery Proxy

ONVIF -- WS-Discovery implementation

Here is a guide to teach you how to implement WS-Discovery by gSOAP. You can also find sample code here.

1. Xml Schema of WS-Discovery 

Use the typemap.dat file located in "\gsoap-2.8\gsoap\wsdl\".
WS-Discovery is already defined in typemap.dat.
 1 # WS-Discovery 1.1 and 1.0
 2 
 3 wsdd = <http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01>
 4 wsdd10 = <http://schemas.xmlsoap.org/ws/2005/04/discovery>
 5 
 6 wsdd10__HelloType  = | wsdd__HelloType
 7 wsdd10__ByeType   = | wsdd__ByeType
 8 wsdd10__ProbeType  = | wsdd__ProbeType
 9 wsdd10__ProbeMatchesType = | wsdd__ProbeMatchesType
10 wsdd10__ProbeMatchType  = | wsdd__ProbeMatchType
11 wsdd10__ResolveType  = | wsdd__ResolveType
12 wsdd10__ResolveMatchesType = | wsdd__ResolveMatchesType
13 wsdd10__ResolveMatchType = | wsdd__ResolveMatchType
14 wsdd10__ScopesType  = | wsdd__ScopesType
15 wsdd10__SecurityType  = | wsdd__SecurityType
16 wsdd10__SigType   = | wsdd__SigType
17 wsdd10__AppSequenceType  = | wsdd__AppSequenceType

2013年9月11日 星期三

ONVIF -- Support Customized Event

If you want to support a customized event which not belong to ONVIF spec.
You can follow below setup to re-generate your gSoap code by gSOAP.

1. Revise WS-typemap.dat to add customized namespace
tnsMy = <http://www.avigilon.com/onvif/ver10/topics>

2013年9月3日 星期二

iOS -- Packet Tracing

當我們在 iOS Device 撰寫網路相關的 APP 時,時常需要分析網路上所傳送/接收的封包,由於 iOS 本身並沒有直接支援擷取封包的功能,因此需要使用其他方法來擷取網路封包。以下參考 developer.apple.com,整理封包擷取的方法。

2013年8月21日 星期三

日本電話來電顯示(SHARP JD-4C2CL-W)

前幾天到日本旅遊,逛 yodabasi 時看到了一台好漂亮的室內電話(SHARP JD-4C2CL-W),在台灣的賣場並沒看過這樣的機型,想到老婆常常抱怨家裡的無線電話有問題,剛好趁這個機會,幫家裡的電話進行升級。
圖片引用自 http://www.sharp.co.jp/in-phone/

ONVIF -- 各種平台上可使用的測試工具

工作上常常需要使用不同的 ONVIF 軟體來測試 IPCAM 對於 ONVIF 的支援能力,其中最常用的ONVIF測試工具,主要是 Windows 作業系統的兩個軟體,如下:
  • ONVIF Test Tool
  • ONVIF Device Manager

鑑於不同的作業系統可能會提供不同的 ONVIF 測試軟體,以下特別對此作一整理。

2013年8月15日 星期四

Blogger Utilities

在撰寫 blog 的時候,會用到一些第三方開發的工具。以下將這些工具作一整理。

1. Blogger 編輯文章,如何加入繼續閱讀的功能
此部份請參考 Blog語法研究室的文章 『新版Blogspot範本有「繼續閱讀」的功能』。

2. 多層樹狀標籤
基本原理是使用 google blogger 的小工具『標籤』,並更改其 Java Script,這邊我是使用 WFU 所提供的樹狀標籤,可參考以下兩個URL。
http://wayne-fu.blogspot.tw/2013/01/multi-tree-label-update.html
http://wayne-fu.blogspot.tw/2012/06/multi-tree-label-1.html

3. 幫部落格文章自動定標籤
雲標籤
http://amanda0626.blogspot.tw/2013/05/blog-post_24.html
http://www.playpcesor.com/2007/11/sitetag.html

4. Blogger 設定電子郵件發文的功能
Blogger平台提供透過電子郵件發文的功能,其用法如下:
  1. 以您的帳號密碼登入,進入 [ 管理後台 ]。
  2. 到右側邊欄位點選【設定】的【行動裝置及電子郵件】。
  3. 在[ 以電子郵件傳送 ] 的 [ 使用電子郵件張貼 ] 右邊空白欄位輸入一組代碼,再加上前後的 ******.您的代碼@blogger.com ,即為您的發文專用的電子郵件。
  4. 在右上角按【儲存設定】即可完成。

5. Blogger 熱門文章
Blogger平台提供了許多小工具,使用其提供的熱門文章就很好用了。

6. Blogger 張貼程式碼
這邊提供我常用的兩個方法 
方法一:
當文章中需要加入程式碼時,首先切換到 HTML 編輯模式,在文章的最前方加入使用以下程式碼
<style type="text/css"><!--
code {
display:block;
overflow:auto;
font-family:"Courier New";
white-space:pre;
background:#F0F0F0 url(images/CodeBlock.png) repeat-y scroll left top;
border:1px solid #CCC;
margin:5px 15px 0;
padding:5px 5px 5px 20px;
line-height:1.2em;
max-height:80;
width:90%;
}
</style>
在程式碼的前方與後方分別加上<code></code>,如下:
<code>-(void)saveImage:(UIImage*)image        toAlbum:(NSString*)albumName        withCompletionBlock:(SaveImageCompletion)completionBlock;
</code> 
顯示的結果為 -(void)saveImage:(UIImage*)image toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock; 

方法二:
使用免費的 highlight 程式,幫忙產生對應的 html code,再複製到 blogger。
註:另外建議這個放程式的方法,很棒,但我還不會用。

2013年8月7日 星期三

ONVIF -- 如何產生正確的 TopicSet

針對 ONVIF 13.06 test tool 的測試案例 ACCESSCONTROL-12-1-1,進行測試時,
在 Step 4 Validate topics XML representation. 會發生錯誤。

問題是 Test tool 認為 GetEventPropertiesResponse 的 xml 不合法,
錯誤訊息為 "tns1:Configuration/tns1:VideoEncoderConfiguration must be respresennted by a non-qualified element"

查詢event.wsdl內的GetEventPropertiesResponse,可得知問題與 TopicSet 的設定有關,
以下便針對 GetEventPropertiesResponse 內如何產生 TopicSet 作一討論

2013年8月4日 星期日

[xcode] 清除 recent memu

打開 xcode,裡面常常出現許多已經沒有使用的 Project,下面的操作可以將 Project list 整個清空。
  1. Launch Xcode
  2. Select File->Open Recent->Clear Menu
  3. Right-click the Xcode icon and select "Show All Windows". You should now see only your current document in the recents list at the bottom
  4. Quit Xcode. The recents list should now only be populated with your single current project.

FFMPEG -- RTSP and RTP over HTTP

QuickTime 4.1 在 Transport Capability 上,增加了 RTSP
RTSP 可以透過 application/x-rtsp-tunneled,使用 HTTP tunnel 的方式來進行溝通


若要在ffmpeg下使用 RTSP over HTTP,其用法如下:
AVDictionary *opts = 0; if (usesTcp) { int ret = av_dict_set(&opts, "rtsp_transport", "tcp", 0); } err = avformat_open_input(&avfContext, filename, NULL, &opts); av_dict_free(&opts);


參考資料
1. RTSP_Over_HTTP.pdf
2. QuickTime Streaming Server Modules Programming Guide
3. http://stackoverflow.com/questions/14459513/rtsp-tunneled-http-ffmpeg
ttps://developer.apple.com/quicktime/icefloe/dispatch028.html
4. State Machine http://docs.lscube.org/rtsp.xhtml


2013年8月2日 星期五

gSOAP -- Empty Element Tag 的產生規則整理

若一個 xml elemnt 為空,一般有兩種表示方式。
<tag></tag>
<tag />

那麼當使用 gSoap 建議的 onvif schema 產生程式碼後,如何確認哪些函數會生成 <tag />的形式呢?
gSOAP 的 stdsoap2.c中會透過soap_element_start_end_out()函數產生 "/>" 的標籤,而透過 onvif schema 所產生的程式碼,主要會透過呼叫 stdsoap2.c其中的三個函數 soap_element_href(), soap_element_null(), soap_element_nil()來產生 "/>" 的標籤。 
由於 gSoap 會自動根據 wsdl 產生 header file, 接著自動產生程式碼。
因此若我們想要強制其產生</>,則不應該手動呼叫上述的三個函數,
而應該了解其生成原理。藉著修改wsdl, 或是 header file, 來達成此功能。

2013年8月1日 星期四

[Embedded] TFTP 使用舉例

今天因為手殘,結果更新ipcam韌體失敗,一開機就出現了 kernal panic。只好複習一下使用 uboot 更新韌體的方法。以下將今天的作法作一記錄。

TFTP Server (使用 ubuntu v12.04)

1. 用apt-get直接裝TFTP server套件。
sudo apt-get install tftpd-hpa

2. 視需要修改設定值
視需要修改/etc/init/tftpd-hpa.conf, /etc/init.d/tftpd-hpa, /etc/default/tftpd-hpa
可使用 "ps -A|grep tftp" 檢視是否服務有正確啟動
若沒有正確啟動,執行下列命令 sudo service tftpd-hpa restart
3. 將要傳輸的檔案放置到 /var/lib/tftpboot
例如: cp uImage_ipnc_DM365 /var/lib/tftpboot
註:若在Windows環境,可使用這個 tftp server http://tftpd32.jounin.net/

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

2013年5月30日 星期四

[轉] 達夫設備(Duff's Device)的詳細說明

轉載自 http://blog.csdn.net/kingmax26/article/details/5252657

达夫设备(Duff's Device)的详细说明


前几天在网上看见了一段代码,叫做“Duff's Device”,后经验证它曾出现在Bjarne的TC++PL里面: 

代码的结构显得非常巧妙,把一个switch语句和一个do-while语句糅合在了一起。而在我看过的所有关于C和C++的书中,这样的代码都 是毫无道理的。然而,无论是在VS2005还是在GCC4.1.2下,这段代码都能正确地通过编译。加上适当的main函数,它都可以正常运行。我百思不 得其解。上网去查,也没查到好答案。

怎么办?先看看它的汇编代码吧,也许可以通过它的汇编代码看出它的意思。

2013年5月28日 星期二

ONVIF -- Multicast 問題分析經驗談

在進行 ONVIF Device Test Tool v12.12 的測試過程中,當測試 ONVIF 的 startMulticast 命令時,送出 Audio 時總是無法通過測試工具的檢驗,後來釐清是因為 profile s中規定 audio需要設定為 PCM-ulaw 的關係,但因此也學習了許多與 multicast 有關的知識。

以下將以 startMulticast 為例,整理幾個分析 multicast 的小技巧。

預備知識

StartMulticast 命令所做的事情,就是根據某個已經設定好的 profile,啟動 multicast streaming,可能同時包含 video 與 audio。原文摘錄如下:
This command starts multicast streaming using a specified media profile of an NVT. Streaming continues until StopMulticastStreaming is called for the same Profile. The streaming shall continue after a reboot of the NVT until a StopMulticastStreaming request is received. The multicast address, port and TTL are configured in the VideoEncoderConfiguration, AudioEncoderConfiguration and MetadataConfiguration respectively. An NVT that supports video, audio or metadata multicast streaming shall support the starting of a multicast stream through the StartMulticastStreaming command.