[ffmpeg][ios][Android] 如何在iOS/Android上面使用 ffmpeg

自從在Windows完成 live555(OpenRTSP)與 ffmpeg之後,就很想把它整理好之後放到iOS與Android上面. 不過尋找了一下,發現大部份人在iOS與Android上面都是直接使用 ffmpeg來播放 RTSP的資料. 不過其實Android  4.0之後其實 Videoview就已經支援RTSP的播放,那麼為何還需要ffmpeg呢? —>  利用 VideoView 會有10 秒的延遲,如果想要把延遲減少比較好的方式就不要用build-in player而是使用ffmpeg來播放檔案或是RTSP streaming 所以把如何使用的部分做了一下整理,分別有iOS與Android的部分如下: iOS上如何使用ffmpeg http://www.takobear.tw/201702608526356260322804024687/opensource-ffmpeg-21-for-ios-xcode-51-os-x-1092? 這篇文章已經把ffmpeg去整合在xcode 5.1.1裡面其實就超好用,實際演練 iOS6/iOS7都是可以跑的. 簡單地講在iOS上面使用 ffmpeg流程如下: 利用clang 把ffmpeg 編譯起來, libavXXX.a  在iOS專案裡面加入各個a 並且把header搬進來 如果有裝Xcode 6 beta,千萬記得要把command line tool 改掉.測試過xcde6 beta1 是會有問題的. 更多參考: http://www.takobear.tw/201702608526356260322804024687/ffmpeg-ios-61 https://github.com/BigHillSoftware/QTFFmpeg Android上如何使用ffmpeg 由於Windows 我一直無法正確把ffmpeg編譯起來這裡只講Mac版本 裝ccache 安裝Android NDK for Mac 我是裝r9b (OSX 10.9.3) 設定系統參數 touch ~/.bash_profile; open ~/.bash_profile 增加一個新的 export ANDROID_NDK=你解開NDK的位置 記得把它加入你的PATH會更簡單 測試NDK 移動目錄到 /home/android-ndk-r5b/samples/hello-jni/ 執行 ndk-build 準備build ffmpeg 下載script https://github.com/yixia/FFmpeg-Android 執行./FFmpeg-Android.sh 查看 ./build/ffmpeg 下是否有 armv6/armv7/neon/vfp 目錄並且確認是否有libffmpeg.so 建立demo App 先寫一個可以播放rtsp的player(這裡是基本播放),不過要有Android可以播的倒是很麻煩… (可以先試試看mp4) 加上JNI的支援(這裡由於我是初學,所以搞得有點久,可能會記錄詳細一點): 新增一個jni的資料夾 新增檔案 Android.mk 還有ffmpeg-jni.c 內容可以參考這篇文章 要注意ffmpeg-jni.c 裡面的函數名稱有 Android Project name 與package name要對應到你的設定 利用 command line 的NDK來編譯JNI (也就是 裡用command line在project 目錄上 打ndk-build) 這時候會產生 libs 裡面的檔案,重新clean與rebuild Android App就可以看到正確的鏈結. 如果想要把JNI加入Eclipse的自動編譯(參考這篇文章),步驟如下: 在專案上面選[Properties] -> Builders ->New-> Program 在[Main] Tab裡面 Name: 任意 Location: 選取NDK安裝目錄 Working Directory: “${workspace_loc:${project_path}}” (建議照貼,不然會出現error: Please define the NDK_PROJECT_PATH variable to point to it. [Refresh] Tab要選擇 [Specific Resource] 然後位址指定 libs (也就是產出.so 的位置) [Build Option] Tab要勾選以下,就可以透過 clean 來啟動 ndk build 動作。 [Allocation in Console] [Launch in...
繼續閱讀

[OpenCV] 相機增加物件追蹤(Object Tracking)的部分

OpenCV是一個相當好用的影像處理SDK,除了可以快速開發相機測試程式之外,也有許多功能可以增加. 最近看到一般數位相機有類似的功能,於是去找了一下.以下是示意影片.完整網址在這裡,不過他有用到OpenFramework去操控OpenCV個人覺得不好使用.比較推薦直接使用OpenCV其實程式會很小.    研究了一下,發現其實效果不錯.於是整理出一個簡單的 VS2013 Console 的測試程式 (本來有想用 Python 後來發現需要太多的原件而且很難debug,所以先弄Windows版本)  https://github.com/kkdai/OpenCVConsole 這個測試程式主要可以讓我測試一些功能,他目前支援以下一些功能: 起始你的Camera 並且使用最預設的解析度 支援旋轉,他的熱鍵如下: t/T: 90度旋轉 f/F: 180度旋轉 r/R: 270度旋轉 n/N: 回復原狀 灰階化,方便之後做進階的影像處理(熱鍵 g/G) 物件追蹤,目前測試發現辨識率不高,並且灰色階也沒有差異.使用方式如下: 利用你的滑鼠去選取你要追蹤的部分 他會複製起來~並且把你要追蹤的部分用匡線標起來 狀況大概是以下狀態:
繼續閱讀

[iOS]第一個iOS App上架- 粉絲相簿 1.0

被退回來三次,被要求加上教學模式後,人生第一個自己弄的iOS App終於上架. 以下的鏈結可以下載:  https://itunes.apple.com/tw/app/fen-si-xiang-bu/id839324997?l=zh&mt=8 這裡記錄一下整個心路歷程,排除掉App本身比較困難的部分之外: 一開始其實最困難的其實就是開啟一個App的憑証,並且讓iPhone可以正常的安裝到憑証.(其實是讓Xcode安裝憑証)  詳細可以參考: http://app-island.com/app/2560/%E8%A3%BD%E4%BD%9Cxcode%E6%86%91%E8%AD%89%EF%BC%8C%E8%AE%93%E9%96%8B%E7%99%BC%E7%9A%84APP%E5%8F%AF%E4%BB%A5%E5%AE%89%E8%A3%9D%E5%88%B0iOS%E8%A3%9D%E7%BD%AE%E5%81%9A%E6%B8%AC%E8%A9%A6 可以安裝App到手機後,之後困難的就是上傳的問題還有Provisioning Profiles的簽署 好不容易上傳上去後,接下來就是等待審查 第一次失敗:  有兩個問題 FB Login 會跳出網頁,也就是我的 Single Sign On 沒弄好 要求增加分享的功能 修復好SSO之後並且增加了分享功能後又送上去審查,又被打回來 UI需要有更清楚的標示. 經過解釋後把整個說明網頁弄得清楚一點之後,又送上去.結果第三次被打回來: 還是覺得不夠清楚,雖然我在solution center裡面有解釋整個流程,但是審查人員希望可以有tutorial告訴使用者. 這時候花了比較多的時間,問了一些人有沒有比較好的tutorial 的SDK可以用.有人推薦了這個WSCoachMarkView.真的算簡單,然後方便的. 總算通過審查,但是仍然久久沒上架去看了一下後,發現遇到 Pending Contract,原來是銀行跟稅務沒有設定好.參考這裡 最後就會出現Wait for Sale,再過沒多久就出現啦. 最後分享一下如何分享你的App網址給人家 到iTune 裡面尋找你的App,在圖示上面按下右鍵複製鏈結就可以了. 想要更多關於我App粉絲相簿的介紹?去 Github看吧  https://github.com/kkdai/iOS-APP-FBAlbums 參考: 關於憑証安裝 [iOS][FacebookSDK] 更換Facebook SDK 到 3.13啟動 SSO (Single Sign On) [iOS] 上架App到Apple去review前會遇到的一些問題– 使用 XCode Organizer 來遞交App到Store IOS App上架經驗分享(三)
繼續閱讀

[coursera][Functional Programming Principles in Scala] 關於課程學習心得(2)(完)

這是接下來寫幾個禮拜的學習心得. 其實我不知道是課程安排的問題,還是我習慣邊寫邊測試.到後面幾個禮拜,因為比較容易用worksheet去撰寫.整個變得相當容易寫而且快速. Week4: 撰寫霍夫曼樹的處理函示 主要內容是關於List的操作,但是比較奇怪的是關於List操作的課程卻是在week5的影音課程裡面 O_o 因為直接拿List來處理,搭配著patch matching其實很容易就上手.這裡可以建議各位多使用worksheet來當你學習上的好朋友,可以快速上手並且測試你的想法. 我的例子就是由於有worksheet可以使用,馬上就著手去開發相關的部分,並且一方面也可以馬上測試來看結果.(順便多寫一些unit test)這樣寫起來應該很快又可以寫完(不過我也是花了接近10+個小時) 最後結果雖然答案都寫完了不過由於用到太多輔助函示被扣了點分數. week5: 本週沒作業 主要是教導一些其他關於集合的處理方式比如說map,filter,flatMap等等相關的內建函示 week6: anagrams也就是給你一個字串把它重組後顯示所有可能的字 一開始是使用之前用過的pattern match來寫,不過看到提示要用high-order來寫.所以全部重寫花了一點時間.果然就可以一行寫好,不過很難閱讀啊… 整體寫起來比week4 還快,不過也不簡單因為許多high-order的函示要搞懂它的用法與如何好好的用它才能寫得更好. 這次還是被扣分~函示輸出太多記憶體不足…. week7: 寫出遊戲Bloxorz 總算把最後一個作業都做完了,感覺有點倒吃甘蔗.後面越來越能了解如何去使用high order function 還有使用各種的recursive 來找出解答. 課程上的倒水杯程式真的很有趣,也很有幫助.倒水杯就是給你兩個不容量度的杯子.比如說一個杯子300cc,另外一個500cc 然後請你倒出400cc的水,你能做的就是到滿某杯或是從某杯倒向另外一個杯子. 我從測試四開始的習慣就是在worksheet上面去寫程式.寫好一個馬上測試結果.並且重複思考每一個步驟是不是有問題.這樣得學習方式對於scala不算熟悉的我相當有幫助. 關於這個禮拜的習題,幾個小建議: 原來提供的unit test真的太少,自己寫一些 最後最佳答案找不出來,試著把圖弄小一點找問題 心得: 學習scala真的讓我有挫折的感覺.不僅僅有許多演算法,更有一些high order function的使用法或是methond/expression parameter .不過學完之後對於其他語言的學習(swift)我想是有相當程度的幫助. Scala的worksheet真的是很酷的東西,而最年輕的語言Swift 也有playground類似的東西(或者是類似iPython的東西). 以前沒有unit test的習慣,由於functional programming的每個函示跟UI的結合比較少而且需要確保每一個部分可以完美的運作,於是我必須要每寫好一個就去思考如何跑unit test.我想這會養成我之後相當好的習慣. 我其實很推薦每個程式設計人員都必須要學過functional programming,他能幫助你不斷地把問題切斷成小段的函示,彼此間不會互相干擾,並且能去組合出最後最佳的結果. 可以參考IBM這篇文章: Functional Thinking
繼續閱讀

[iOS][Android] 許多好用的SDK蒐集(1)

iOS MRProgress  https://github.com/mrackwitz/MRProgress 相當漂亮的 Loading Progress FlatUIKit https://github.com/Grouper/FlatUIKit 扁平化UI 設計的一些原件 WSCoachMarksView https://github.com/workshirt/WSCoachMarksView  製作app使用教學的SDK(interactive coach marks)  JazzHands https://github.com/IFTTT/JazzHands 另外一個製作app使用教學的SDK(app intro) PSTCollectionView https://github.com/pinterest/PSTCollectionView iOS 4.3相容的 UICollectionView不需要用到 iOS6以上,而且是由pinterest 的人弄的. YRDropdownView https://github.com/onemightyroar/YRDropdownView 比UIAlertView更好用的提醒視窗… 有許多種類… Android drag-sort-listview https://github.com/bauerca/drag-sort-listview 拖曳排序用的list view,其中也有section 的list view.可以參考https://github.com/……/android/demodslv/Sections.java Android-SwipeToDismiss https://github.com/romannurik/Android-SwipeToDismiss Listview做左右滑動刪除這個library已經寫好OnTouchListener只要把兩個java檔copy到你專案setOnTouchListener
繼續閱讀

[WWDC2014]影片學習心得

這裡放一些我看完WWDC2014 session 的心得 Introduce of Swift 身為WWDC2014最大的震撼彈,Swift的發表代表著iOS/MacOS的開發也可以使用現代程式設計語言的特性. Swift擁有的新的特性如下: Generic Tuples Closure 整個會場內容大多都是簡單地介紹語法,我覺得光是看官方語法就很足夠了. Introduce CloudKit 這是我最期待的session,因為他可以幫忙架設server的部分. CloudKit 的簡介: 主要是用來存取iCloud services 支援OSX與iOS 必須使用iCloud 帳號 可以擁有公開(?)與隱秘的資料庫 Container 基本單位,一個App會有一個Container 負責讀取與寫資料到iCloud Database 一個app可以管理一個公開的跟一個私密的資料庫 公開資料庫負責放共享的資料,只有在寫的時候才需要帳號~容量算在開發者身上 私密資料庫負責放使用者資料,不論寫或是讀都需要帳號~容量算在使用者身上 Record: 在我看起來很像是資料庫的Table一樣,不過他是採取Map的方式也就是Key->Value 才讀取/寫入 Record Zone: 管理一堆的Record,有分成Default Zone 跟 Custom Zone.俱有資料管理的功能,可以找回一些修改的變動. Design for Game Controller 主要是介紹如何設計一個能搭配MFi(Made For iPhone/iPad/iPod)的外在遊戲控制器的app. 所有的遙控器都支援GamePad而具有左右蘑菇頭的遙控器(joystick: API ThumbStick)會有GCExtendedGamePad PressedChangedHandler: 可以接受按下去與放開的event 可以偵測按鈕的敏感度(presure sensitive),官方也給一些幾個建議.  新的部分(iOS8)如下: Controller Forwarding 把iPhone當成一個額外的控制器來控制其他iDevice(iPad) (以後應該有 Apple TV) iPhone會被當成是搖桿而被GamePad API找到 Motion Forwarding 可以用G Sensor 並且有三軸定位的資料結構 Idle Timer 玩遊戲的時候到了iOS8 會自動把省電關閉螢幕的裝置關掉 (其實iOS7 是bug吧?) Pause Button 它是一個toggle的按鈕,要自己處理相關行為 Player Indicator LEDs 也就是定位你是第幾個遙控器(看來敵人真的是一般的遊戲主機) 當多人控制的時候,這邊有些部分要注意: 好好的分配整個Indicator Array 要分陪哪個控制器可以操控選單 定義如果有任何遙控斷線的撞控(哪些要暫停~哪些不需要)
繼續閱讀