Android 行動上網裝置 應用 - 多媒體影音串流播放器 班級: TI702 成員: 98971036  林聖哲     98971037  陳晁偉     98971042  連力航     98971046  郭君彥     98971...
總覽 (1)- 序 <ul><li>背景研究 </li></ul><ul><ul><li>MID 、市場定位、 ARM 、 android </li></ul></ul><ul><li>動機與目標 </li></ul><ul><li>功能描述 ...
總覽 (2)- 研究內容 <ul><li>伺服器與應用程式開發 </li></ul><ul><ul><li>VLC 影音串流伺服器 </li></ul></ul><ul><ul><li>Android 應用程式開發 </li></ul></ul...
總覽 (3)-porting- 成果與展望 <ul><ul><li>ARM9 (Mini 2440)+android     work </li></ul></ul><ul><ul><ul><li>Kernel   </li></ul></ul...
總覽 (4)-AP- 成果與展望 <ul><ul><li>Android  多媒體播放器 </li></ul></ul><ul><ul><ul><li>可播放影片   ok </li></ul></ul></ul><ul><ul><ul><li...
背景研究
行動上網裝置  (MID) <ul><li>英特爾發展平台 </li></ul><ul><ul><li>Menlow  </li></ul></ul><ul><ul><li>Moorestown  </li></ul></ul><ul><li>...
市場定位 <ul><li>非小筆電、智慧型手機 </li></ul><ul><li>強調口袋規格 </li></ul><ul><li>市場表現 </li></ul><ul><ul><li>Forward Concepts  估計行動網路裝置的出...
ARM 架構的行動裝置 <ul><li>ABI Research 預測: 行動裝置  ARM  架構將勝出 ⑤ </li></ul><ul><li>ARM  執行長: </li></ul>還有勝算! 行動運算市場 … ⑦
Android  熱潮  <ul><li>由開發者社群所帶來的概念 </li></ul><ul><li>強力推手  Google </li></ul><ul><li>Android + ARM  组合在  Computex 2009 上大放異彩...
動機與目標 <ul><li>上網不受侷限 </li></ul><ul><ul><li>攜帶輕便 </li></ul></ul><ul><ul><li>隨時上網 </li></ul></ul><ul><ul><li>操作便利 </li></ul>...
功能描述 <ul><li>Android  軟硬體整合 </li></ul><ul><li>應用程式開發 </li></ul><ul><ul><li>前端  - Android </li></ul></ul><ul><ul><ul><li>多媒...
系統硬體架構 Internet Android 行動上網裝置 影音串流伺服器 x86 PC FriendlyARM Mini2440 ARM9 S3C2400
伺服器軟體套件需求 <ul><li>OS: Ubuntu 9.04 </li></ul><ul><li>VLC Media Player and Server </li></ul><ul><ul><li>(Open-Source and Cro...
Android 檔案系統軟體架構
VLC  影音串流伺服器設定
為何使用影音串流伺服器 <ul><li>應用程式端的環境有限制 </li></ul><ul><ul><li>支援較少的影音編碼 </li></ul></ul><ul><ul><li>硬體效能不高 </li></ul></ul><ul><li>影...
Android  支援的影音編碼 <ul><li>Video Coder </li></ul><ul><ul><li>H.263 、 H.264 、 MPEG-4 </li></ul></ul><ul><li>Audio Coder </li>...
VLC  選擇串流功能
加入要串流的影音檔案
串流協定和影音編碼設定
影像參數設定
音效參數設定
播放測試
輸入串流主機  IP
 
Android  應用程式開發
開發環境 <ul><li>Android 1.5 SDK Release 3 </li></ul><ul><ul><li>Development tools </li></ul></ul><ul><ul><li>Android Platform...
Android Resource <ul><li>Android Developers </li></ul><ul><ul><li>http://developer.android.com/ </li></ul></ul><ul><ul><li...
VideoPlay.java
Application UI
VideoDM.java
 
應用程式開發遭遇問題
播放器測試直接播放檔案
OK
播放器測試播放串流影音
透過網路連線觀察
沒有反應
應用程式遭遇問題研究
透過 HTTP 串流直接播放影片
Work!!
問題還沒解決 可 可 Youtube 下載的影像檔 不行 可 自己轉檔的 影像檔 透過 HTTP 串流播放 檔案方式直接播放
moov atom <ul><li>Android Media Framework </li></ul><ul><ul><li>moov atom is needed for HTTP progressive streaming </li></...
轉出 Android 可串流播放的影片 <ul><li>OS: Ubuntu 9.04 </li></ul><ul><li>Tools </li></ul><ul><ul><li>ffmpeg (media converter) </li></...
先轉成 Android 支援的編碼和格式 <ul><li>ffmpeg -i  ../TS4.flv  -s 128x96 -aspect 1.2222  -vcodec   libx264  -b 64k -bt 64k -r 12  -ac...
處理  moov atom <ul><li>strings TS4.mp4 | grep -n &quot;mdat|moov“ </li></ul><ul><ul><li>4:?a+mdat </li></ul></ul><ul><ul><l...
未解決的部份 <ul><li>影音串流伺服器 </li></ul><ul><ul><li>如何讓  Android  播放器連接上伺服器時,伺服器必須優先送出帶有  moov atom  資料的封包 </li></ul></ul>
核心移植過程和問題
porting <ul><li>比對 kernel 差異 </li></ul><ul><ul><li>版本 :2.6.27 </li></ul></ul><ul><ul><li>工具 :winMerge </li></ul></ul><ul><...
Kernel + Google download Linux kernel -android Drivers/android/ Hardware dependent Mini2440 patch Get platform patch Andro...
diff
 
驅動移植 <ul><li>LCD 驅動移植 </li></ul><ul><li>RTC 驅動移植 </li></ul><ul><li>網卡 DM9000 驅動移植 </li></ul><ul><li>Touch 驅動移植 </li></ul><...
整合修改 <ul><li>修改文件 </li></ul><ul><li>kernel.git/arch/arm/mach-s3c2440/mach-s3c2440.c   </li></ul><ul><ul><li>修改背光  附錄 A </l...
遇到的問題 <ul><li>LCD 的問題 </li></ul><ul><ul><li>成功移植 kernel 且正常開機,執行 android 看不到 LCD 畫面 </li></ul></ul><ul><ul><li>解決 : Double...
附錄 A <ul><li>修改背光   </li></ul><ul><li>修改文件 kernel.git/arch/arm/mach-s3c2440/mach-s3c2440.c  </li></ul><ul><li>(這裡的修改方式為較簡單...
附錄 B <ul><li>修改時鐘 </li></ul><ul><li>修改文件 kernel.git/arch/arm/mach-s3c2440/mach-s3c2440.c  </li></ul><ul><li>static void __...
附錄 C(1) <ul><li>修改顯示 </li></ul><ul><li>修改文件 kernel.git/arch/arm/mach-s3c2440/mach-s3c2440.c  </li></ul><ul><li>static stru...
附錄 C(2) <ul><li>static struct s3c2410fb_mach_info smdk2440_fb_info __initdata ={  。。。。。。  </li></ul><ul><li>.default_displ...
謝謝指教!
Upcoming SlideShare
Loading in …5
×

TI702_Android_MID

2,228 views

Published on

ppt

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,228
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
31
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

TI702_Android_MID

  1. 1. Android 行動上網裝置 應用 - 多媒體影音串流播放器 班級: TI702 成員: 98971036 林聖哲     98971037 陳晁偉     98971042 連力航     98971046 郭君彥     98971053 王裕鈞     98971057 江慶峰 財團法人資訊工業策進會 半導體學院 - 嵌入式系統程式設計班
  2. 2. 總覽 (1)- 序 <ul><li>背景研究 </li></ul><ul><ul><li>MID 、市場定位、 ARM 、 android </li></ul></ul><ul><li>動機與目標 </li></ul><ul><li>功能描述 </li></ul><ul><ul><li>Linux kernel +Android fs-> 多媒體 AP 開發 -> 影音串流伺服器 </li></ul></ul><ul><li>系統軟體架構 </li></ul><ul><li>Android 架構 </li></ul>
  3. 3. 總覽 (2)- 研究內容 <ul><li>伺服器與應用程式開發 </li></ul><ul><ul><li>VLC 影音串流伺服器 </li></ul></ul><ul><ul><li>Android 應用程式開發 </li></ul></ul><ul><ul><li>遭遇問題與研究 </li></ul></ul><ul><li>Porting 與整合修改 </li></ul><ul><ul><li>Diff kernel </li></ul></ul><ul><ul><li>驅動移植 </li></ul></ul><ul><ul><li>文件修改 </li></ul></ul><ul><ul><li>問題與解決 </li></ul></ul>
  4. 4. 總覽 (3)-porting- 成果與展望 <ul><ul><li>ARM9 (Mini 2440)+android work </li></ul></ul><ul><ul><ul><li>Kernel </li></ul></ul></ul><ul><ul><ul><ul><li>基本驅動 ( 顯示、音效、 RTC 、 touch) ok </li></ul></ul></ul></ul><ul><ul><ul><ul><li>周邊驅動 (USB 、 SD 卡、 DM9000) ok </li></ul></ul></ul></ul><ul><ul><ul><li>Android FileSystem </li></ul></ul></ul><ul><ul><ul><ul><li>使用別人修改好的 遺憾 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>因 Android 官方版本只支援 arm v5 以上版本, </li></ul></ul></ul></ul><ul><ul><ul><ul><li>我們所使用的開發板是 arm v4 ,無法全部自已修改 </li></ul></ul></ul></ul><ul><ul><li>心得與期望 </li></ul></ul><ul><ul><ul><li>希望更多時間與機會深入 Android 的 FS </li></ul></ul></ul><ul><ul><ul><li>想嘗試 porting 在不同平台上 ( 成本考量我們使用的開發板跑不太動 android 系統 ) </li></ul></ul></ul>
  5. 5. 總覽 (4)-AP- 成果與展望 <ul><ul><li>Android 多媒體播放器 </li></ul></ul><ul><ul><ul><li>可播放影片 ok </li></ul></ul></ul><ul><ul><ul><li>可透過 HTTP 協定播放串流影音 ok </li></ul></ul></ul><ul><ul><li>影音串流播放 </li></ul></ul><ul><ul><ul><li>自行轉檔做出 Android 可串流播放的影片 ok </li></ul></ul></ul><ul><ul><ul><li>透過 VLC 串流伺服器播放 遺憾 </li></ul></ul></ul><ul><ul><ul><ul><li>VLC 串流伺服器無法在連線進入時,優先 送出 moov atom 封包,使應用程式端播放 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>器無法播放串流影音 </li></ul></ul></ul></ul><ul><ul><li>心得與期望 </li></ul></ul><ul><ul><ul><li>加強播放器的 UI 讓使用者可從儲存裝置中選擇要播放的影片檔,或者輸入網址播放串流影音 </li></ul></ul></ul><ul><ul><ul><li>研究 VLC 的程式碼,解決 VLC 串流伺服器的問題 </li></ul></ul></ul><ul><ul><ul><li>期望進一步能做到使用 MID+Android 做到安全監控系統 </li></ul></ul></ul>
  6. 6. 背景研究
  7. 7. 行動上網裝置 (MID) <ul><li>英特爾發展平台 </li></ul><ul><ul><li>Menlow </li></ul></ul><ul><ul><li>Moorestown </li></ul></ul><ul><li>發展歷史 2009 </li></ul><ul><ul><li>02/16 - 英特爾宣布擴大 MID 與 LG 合作 </li></ul></ul><ul><ul><li>06/23 - 英特爾宣佈與 Nokia 結盟 </li></ul></ul>
  8. 8. 市場定位 <ul><li>非小筆電、智慧型手機 </li></ul><ul><li>強調口袋規格 </li></ul><ul><li>市場表現 </li></ul><ul><ul><li>Forward Concepts 估計行動網路裝置的出貨量將自 2008 年 30.5 萬台成長到 2012 年的 4000 萬台,達到 120 億美元的營收規模。 ④ </li></ul></ul>
  9. 9. ARM 架構的行動裝置 <ul><li>ABI Research 預測: 行動裝置 ARM 架構將勝出 ⑤ </li></ul><ul><li>ARM 執行長: </li></ul>還有勝算! 行動運算市場 … ⑦
  10. 10. Android 熱潮 <ul><li>由開發者社群所帶來的概念 </li></ul><ul><li>強力推手 Google </li></ul><ul><li>Android + ARM 组合在 Computex 2009 上大放異彩 不可限量 </li></ul>
  11. 11. 動機與目標 <ul><li>上網不受侷限 </li></ul><ul><ul><li>攜帶輕便 </li></ul></ul><ul><ul><li>隨時上網 </li></ul></ul><ul><ul><li>操作便利 </li></ul></ul><ul><li>Android </li></ul><ul><ul><li>市場熱潮 </li></ul></ul><ul><ul><li>行動裝置的優勢 </li></ul></ul><ul><ul><li>客制化 </li></ul></ul>
  12. 12. 功能描述 <ul><li>Android 軟硬體整合 </li></ul><ul><li>應用程式開發 </li></ul><ul><ul><li>前端 - Android </li></ul></ul><ul><ul><ul><li>多媒體影音播放器 ( 支援影音串流 ) </li></ul></ul></ul><ul><ul><li>後端 - 伺服器 </li></ul></ul><ul><ul><ul><li>影音串流伺服器 </li></ul></ul></ul>
  13. 13. 系統硬體架構 Internet Android 行動上網裝置 影音串流伺服器 x86 PC FriendlyARM Mini2440 ARM9 S3C2400
  14. 14. 伺服器軟體套件需求 <ul><li>OS: Ubuntu 9.04 </li></ul><ul><li>VLC Media Player and Server </li></ul><ul><ul><li>(Open-Source and Cross-Platform) </li></ul></ul>
  15. 15. Android 檔案系統軟體架構
  16. 16. VLC 影音串流伺服器設定
  17. 17. 為何使用影音串流伺服器 <ul><li>應用程式端的環境有限制 </li></ul><ul><ul><li>支援較少的影音編碼 </li></ul></ul><ul><ul><li>硬體效能不高 </li></ul></ul><ul><li>影音串流伺服器 </li></ul><ul><ul><li>轉換各種編碼至特定的編碼輸出 </li></ul></ul><ul><ul><li>壓縮影像品質使播放影片的效能需求降低 </li></ul></ul>
  18. 18. Android 支援的影音編碼 <ul><li>Video Coder </li></ul><ul><ul><li>H.263 、 H.264 、 MPEG-4 </li></ul></ul><ul><li>Audio Coder </li></ul><ul><ul><li>AAC 、 MP3 、 MIDI 、 Ogg 、 WAV 、 AMR </li></ul></ul><ul><li>影音串流編碼選擇 </li></ul><ul><ul><li>H.264 with AAC </li></ul></ul>
  19. 19. VLC 選擇串流功能
  20. 20. 加入要串流的影音檔案
  21. 21. 串流協定和影音編碼設定
  22. 22. 影像參數設定
  23. 23. 音效參數設定
  24. 24. 播放測試
  25. 25. 輸入串流主機 IP
  26. 27. Android 應用程式開發
  27. 28. 開發環境 <ul><li>Android 1.5 SDK Release 3 </li></ul><ul><ul><li>Development tools </li></ul></ul><ul><ul><li>Android Platforms Emulator </li></ul></ul><ul><li>Eclipse with ADT Plugin </li></ul><ul><ul><li>Software Development IDE </li></ul></ul><ul><ul><li>Android Development Tools Plugin </li></ul></ul>
  28. 29. Android Resource <ul><li>Android Developers </li></ul><ul><ul><li>http://developer.android.com/ </li></ul></ul><ul><ul><li>Tutorial Documents </li></ul></ul><ul><ul><li>API Package & Class Reference </li></ul></ul><ul><li>SDK include API Demos </li></ul>
  29. 30. VideoPlay.java
  30. 31. Application UI
  31. 32. VideoDM.java
  32. 34. 應用程式開發遭遇問題
  33. 35. 播放器測試直接播放檔案
  34. 36. OK
  35. 37. 播放器測試播放串流影音
  36. 38. 透過網路連線觀察
  37. 39. 沒有反應
  38. 40. 應用程式遭遇問題研究
  39. 41. 透過 HTTP 串流直接播放影片
  40. 42. Work!!
  41. 43. 問題還沒解決 可 可 Youtube 下載的影像檔 不行 可 自己轉檔的 影像檔 透過 HTTP 串流播放 檔案方式直接播放
  42. 44. moov atom <ul><li>Android Media Framework </li></ul><ul><ul><li>moov atom is needed for HTTP progressive streaming </li></ul></ul><ul><li>Solution </li></ul><ul><ul><li>the moov atom has been placed after mdat atom at the end of the file. moves the moov atom to the begin of the file so it can be played out as soon as it buffered enough data. </li></ul></ul>
  43. 45. 轉出 Android 可串流播放的影片 <ul><li>OS: Ubuntu 9.04 </li></ul><ul><li>Tools </li></ul><ul><ul><li>ffmpeg (media converter) </li></ul></ul><ul><ul><li>libx264 (h264 codec library) </li></ul></ul><ul><ul><li>libfaac0 (aac codec library) </li></ul></ul><ul><ul><li>MP4Box (mp4 container multiplexer, include in gpac package) </li></ul></ul>
  44. 46. 先轉成 Android 支援的編碼和格式 <ul><li>ffmpeg -i ../TS4.flv -s 128x96 -aspect 1.2222 -vcodec libx264 -b 64k -bt 64k -r 12 -acodec libfaac -ac 1 -ar 44100 -ab 128k -y TS4.mp4 </li></ul>
  45. 47. 處理 moov atom <ul><li>strings TS4.mp4 | grep -n &quot;mdat|moov“ </li></ul><ul><ul><li>4:?a+mdat </li></ul></ul><ul><ul><li>47781:moov </li></ul></ul><ul><li>將 moov atom 移到 mdat atom 前面 </li></ul><ul><ul><li>MP4Box -hint TS4.mp4 </li></ul></ul><ul><li>strings TS4.mp4 | grep -n &quot;mdat|moov&quot; </li></ul><ul><ul><li>3:moov </li></ul></ul><ul><ul><li>116:Dhumdat </li></ul></ul>
  46. 48. 未解決的部份 <ul><li>影音串流伺服器 </li></ul><ul><ul><li>如何讓 Android 播放器連接上伺服器時,伺服器必須優先送出帶有 moov atom 資料的封包 </li></ul></ul>
  47. 49. 核心移植過程和問題
  48. 50. porting <ul><li>比對 kernel 差異 </li></ul><ul><ul><li>版本 :2.6.27 </li></ul></ul><ul><ul><li>工具 :winMerge </li></ul></ul><ul><li>整合修改 </li></ul><ul><li>問題與解決 </li></ul>
  49. 51. Kernel + Google download Linux kernel -android Drivers/android/ Hardware dependent Mini2440 patch Get platform patch Android+mini2440 Linux kernel Mini2440 Linux kernel www.kernel.org Linux kernel diff
  50. 52. diff
  51. 54. 驅動移植 <ul><li>LCD 驅動移植 </li></ul><ul><li>RTC 驅動移植 </li></ul><ul><li>網卡 DM9000 驅動移植 </li></ul><ul><li>Touch 驅動移植 </li></ul><ul><li>USB Host 驅動移植 </li></ul><ul><li>SD 卡驅動移植 </li></ul><ul><li>Uda1341 驅動移植 </li></ul>
  52. 55. 整合修改 <ul><li>修改文件 </li></ul><ul><li>kernel.git/arch/arm/mach-s3c2440/mach-s3c2440.c </li></ul><ul><ul><li>修改背光 附錄 A </li></ul></ul><ul><ul><li>修改時鐘 附錄 B </li></ul></ul><ul><ul><li> </li></ul></ul><ul><ul><li>修改顯示 附錄 C </li></ul></ul><ul><ul><li> smdk2440_lcd_cfg_initdata 設置 </li></ul></ul><ul><ul><li> (NEC3.5 英寸, 320x240) </li></ul></ul>
  53. 56. 遇到的問題 <ul><li>LCD 的問題 </li></ul><ul><ul><li>成功移植 kernel 且正常開機,執行 android 看不到 LCD 畫面 </li></ul></ul><ul><ul><li>解決 : Double Framebuffer 的關係 </li></ul></ul><ul><li>Touch 的不精準 </li></ul><ul><ul><li>Touch driver 在新版與舊版 linux kernel 之間有很大差異 </li></ul></ul><ul><ul><li>解決 : 捨棄一開始的目標版本 kernel 2.6.25+fs 1.0 </li></ul></ul><ul><ul><li> 改用 kernel 2.6.27+fs 1.5 </li></ul></ul>
  54. 57. 附錄 A <ul><li>修改背光 </li></ul><ul><li>修改文件 kernel.git/arch/arm/mach-s3c2440/mach-s3c2440.c </li></ul><ul><li>(這裡的修改方式為較簡單正規方式是增加一個管理背光的驅動。) </li></ul><ul><li>static void __init smdk2440_machine_init(void) </li></ul><ul><li>{ </li></ul><ul><li>s3c24xx_fb_set_platdata(&smdk2440_fb_info); </li></ul><ul><li>platform_add_devices(); </li></ul><ul><li>s3c2410_gpio_cfgpin(S3C2410_GPG4,S3C2410_GPG4_OUTP); // 添加 </li></ul><ul><li>s3c2410_gpio_setpin(S3C2410_GPG4,1); // 添加 </li></ul><ul><li>smdk_machine_init(); </li></ul><ul><li>} </li></ul>
  55. 58. 附錄 B <ul><li>修改時鐘 </li></ul><ul><li>修改文件 kernel.git/arch/arm/mach-s3c2440/mach-s3c2440.c </li></ul><ul><li>static void __init smdk2440_map_io(void) </li></ul><ul><li>{ </li></ul><ul><li>。。。。。。 </li></ul><ul><li>s3c24xx_init_clocks(12000000); // 修改,原來是 s3c24xx_init_clocks(16934400); </li></ul><ul><li>。。。。。。 </li></ul><ul><li>} </li></ul>
  56. 59. 附錄 C(1) <ul><li>修改顯示 </li></ul><ul><li>修改文件 kernel.git/arch/arm/mach-s3c2440/mach-s3c2440.c </li></ul><ul><li>static struct s3c2410fb_display smdk2440_lcd_cfg __initdata ={ </li></ul><ul><li>。。。。。。 </li></ul><ul><li>.pixclock = 100000, // 修改 ,原來為 166667 </li></ul><ul><li>。。。。。。 </li></ul><ul><li>.right_margin = 37, // 修改 ,原來為 8 </li></ul><ul><li>.hsync_len = 6, // 修改 ,原來為 4 </li></ul><ul><li>.upper_margin =2, // 修改 ,原來為 8 </li></ul><ul><li>.lower_margin = 6, // 修改 ,原來為 7 </li></ul><ul><li>.vsync_len =2, // 修改 ,原來為 4 </li></ul><ul><li>} </li></ul>
  57. 60. 附錄 C(2) <ul><li>static struct s3c2410fb_mach_info smdk2440_fb_info __initdata ={ 。。。。。。 </li></ul><ul><li>.default_display =0 </li></ul><ul><li>//add start </li></ul><ul><li>.gpccon = 0xaa955699, </li></ul><ul><li>.gpccon_mask = 0xffc003cc, </li></ul><ul><li>.gpcup = 0x0000ffff, </li></ul><ul><li>.gpcup_mask = 0xffffffff, </li></ul><ul><li>.gpdcon = 0xaa95aaa1, </li></ul><ul><li>.gpdcon_mask = 0xffc0fff0, </li></ul><ul><li>.gpdup = 0x0000faff, </li></ul><ul><li>.gpdup_mask = 0xffffffff, </li></ul><ul><li>// add end </li></ul><ul><li>.lpcsel = 0xf82, // 修改 ,原来为 ((0xCE6) &~7) | 1<<4, </li></ul><ul><li>}; </li></ul>
  58. 61. 謝謝指教!

×