999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種新型的3G移動媒體播放終端及實現

2013-09-24 07:57:48閆敬文李明峰
汕頭大學學報(自然科學版) 2013年1期
關鍵詞:嵌入式設備系統

閆敬文,李明峰

(汕頭大學工學院電子系,廣東 汕頭 515063)

0 引言

隨著3G網絡的大范圍覆蓋,加上Android、IOS、WindowsPhone等智能手機的普及,通過3G網絡來觀看網絡視頻已經越來越普遍了.但由于可以運行Android等界面操作系統的設備,一般都采用具有較高主頻和較強處理能力的處理器,內存和Flash容量至少在128MB以上[1],成本較高,不適宜大量應用于某些場合,如移動電視,網絡廣告機,視頻會議等.在這些場合中,往往需要用到一些廉價的專用型設備,本文介紹的3G移動媒體播放終端采用S3C2410作為處理器,內存和Flash也只需64MB,在滿足系統需求的前提下很大程度地降低了系統的成本.

1 系統分析

1.1 系統框架

硬件框架如下圖1-1所示.

圖1 -1硬件框架圖

硬件部分是由一個帶顯示器的ARM9開發板加上一個3G上網卡組成.開發板包括了嵌入式的基本系統,例如CPU、內存、Flash、穩壓電源、USB接口、網卡、聲卡等[2].軟件框架如圖1-2所示.軟件部分主要包括以下四個部分:一是驅動部分,二是chat和PPP撥號軟件部分,三是MPlayer播放器部分,四是QT界面部分.接下來的內容,將會圍繞這幾個部分進行詳細的分析.

圖1 -2 軟件框架圖

1.2 3G網卡拆解

由于關于ZTE AC580 3G網卡硬件組成方面的資料較少,所以筆者決定拆解該網卡,其拆解圖如圖1-3所示.

圖1 -3 AC580 3G網卡硬件拆解圖

AC580 3G網卡的硬件組成框架圖如圖1-4所示.這款3G網卡主要由以下5個部分組成:QUALCOMM QSC6085處理器,Hynix Flash芯片,電源管理器,射頻收發器和一個多用的讀卡器.QSC6085芯片集成了ARM926EJS~192MHz,QDSP~100MHz兩個處理器.支持EVDOrA標準,支持MP3,MPEG4,H.263,H.264的解碼等等[3].雖然3G網卡的內部結構看似復雜,但從本質上來看,它只是一個Modem加上一個串口轉USB而已.Modem通過串口轉USB來與用戶設備連接.要說明的是AC580 3G網卡是一個混合USB設備,Modem只是它的其中一個功能模塊.

2 3G上網的實現

2.1 3G網卡驅動

從3G網卡的硬件分析得知,3G網卡使用的雖然是一個USB接口,但實質上是一個虛擬的串口.該3G網卡在Linux底層是一個USB串口設備,所以在開發板端需要進行加載USBSerial的驅動.在Linux中,串口屬于tty設備,對于一個USB串口設備而言,其驅動主要由兩部分組成:usb_driver的成員函數和tty設備的tty_operations結構體成員函數[4].在USB串口設備驅動的模塊加載函數中,將注冊對應于USB串口的usb_driver,并初始化和注冊tty驅動.在Linux內核里,自帶USBSerial驅動,所在的路徑為driversusbserial,AC580 3G網卡只要用內核自帶的USBSerial驅動就可以了.

我們可以把USBSerial驅動程序編譯成模塊,或者將其直接編進內核.由于AC580 3G網卡是一個USB混合設備,系統在設備識別方面與一般設備不一樣,USB串口設備模塊需要在系統識別到Modem后才能起作用,所以,針對AC580 3G網卡的這種情況,選擇把編譯成模塊,然后再等網卡被識別為Modem后才進行加載.把USBSerial驅動編譯成模塊一般使用以下兩種方式:一是直接從內核中編譯出來;二是自己編寫Makefile,再使用編譯模塊命令來調動內核機制來編譯.下面只對直接從內核中編譯進行說明.

首先要配置內核:

[*]Enable loadable module support---> //啟用可裝載模塊支持

---Enable loadable module support

[*]Module unloading //支持模塊卸載

[*]Automatic kernel module loading //自動加載的內核模塊

Device Drivers --->

[*]USB support--->

***USB port drivers***

USB Serial Converter support---> //把USBSerial選擇為模塊編譯

---USB SerialConverter support

[*]USB Generic Serial Driver

然后,進入內核所在的目錄,運行以下命令:

#make modules //開始編譯模塊

在編譯的信息中看到

CC drivers/usb/serial/usbserial.mod.o

LD[M]drivers/usb/serial/usbserial.ko

證明USBSerial驅動已經編譯成usbserial.ko了,此時可以在drivers/usb/serial目錄下找到它.當然在編譯之前請確保選擇的是交叉編譯.也就是說在Linux內核目錄中要把Makefile中的ARCH和CROSS_COMPILE改為以下信息.

ARCH ?=arm

CROSS_COMPILE ?=arm-linux

arm-linux-gcc的版本可以用以下命令查看

#arm-linux-gcc-v //查看交叉編譯器的版本文中用的arm-liunx-gcc版本為3.4.1

2.2 驅動加載

AC580 3G網卡是一個混合設備,它既是CD-ROM,也是USB Mass Storage,也是Modem.在PC機上,有強大的操作系統支持下我們使用起來覺得很方便,但是在嵌入式環境下,就不一樣了,因為嵌入式系統在同一時間內只能使用某一個設備,如果不對設備進行切換的話那就不能使用另外的設備.在該文使用的嵌入式平臺中,一插入網卡,系統只識別它為CD-ROM.并不是所想要的Modem.如果直接加載驅動模塊,則無法建立與Modem的連接.以下介紹一種可行的驅動加載方法.網卡驅動的加載流程如圖2-1所示.

圖2 -1 3G網卡的驅動加載流

到這里,可以查看到/dev目錄下多了ttyUSB0這個設備.這個ttyUSB0其實就是Modem的接口.這樣3G網卡的驅動就加載成功了.但是,此時還不能上網,要上網還要進行撥號.

2.3 3G撥號上網

2.3.1 撥號軟件編譯

文中使用的ppp軟件版本為ppp-2.4.5.ppp-2.4.5軟件包中含有很多個獨立的程序代碼包,包括chat,pppd,pppdump,pppstats等.2.4.5版本的pppd可以跟好地支持3G的調制解調器.這里只需要chat和pppd兩個軟件包[5].

圖2-2為撥號軟件編譯流程圖.打開chat軟件包,里面除了有源代碼外,還有for linux系統的Makefile和for sol2系統的Makefile,因為該文用的是linux系統,所以,這里使用for linux Makefile.

圖2 -2撥號軟件編譯流程

看到圖2-2最后的輸出信息則表明chat二進制文件已經編譯成了.編譯出來的chat二進制文件就可以直接在嵌入式平臺中使用了.編譯pppd的步驟跟chat的編譯步驟一樣.

2.4 內核配置和文件系統的制作說明

要進行3G上網,以下的配置是必不可少的,在內核配置中要打開PPP支持:Networking --->

[*]Network device support---><*>PPP(point-to-point protocol)support //支持點對點協議[*]PPP multilink support(EXPERIMENTAL) //支持多鏈路

另外,需要在文件系統加入chat、pppd程序,同時需要創建他們所依賴的文件目錄.該文使用的根文件系統為cramfs,在博創的cramfs根文件系統的基礎上,加入需要的命令和目錄.這里要做的是,把前面編譯好的chat和pppd復制到/bin目錄下,同時,在/etc下添加一個ppp文件夾,并且把它鏈接到/mnt/yaffs/ppp.同時在/etc下建立一個resolv.conf文件,并且把它鏈接到/mnt/yaffs/resolv.conf.等到啟動系統后,再創建/mnt/yaffs/ppp文件夾和文件/mnt/yaffs/resolv.conf,resolv.conf用于保存DNS等信息.

2.5 撥號上網

AC580 3G網卡與GRPS,GSM模塊都是同樣使用AT指令進行撥號連接.由于篇幅有限,具體的指令使用,在這里就不一一介紹了.下面是AC580 3G上網的撥號腳本.

/bin/pppd connect'/bin/chat-v"""AT""""ATE0 OK""""AT+CMGF=1 OK""""AT^PREFMODE=8 OK""""AT+CSQ OK""""ATDT#777 CONNECT"'user ctnet@mycdma.cn password vnet.mobi/dev/ttyUSB0 115200 nodetach nocrtscts debug usepeerdns defaultroute ipcp-accept-local ipcp-accept-remote&

3G網卡的撥號連接過程如圖2-3所示.

運行撥號腳本后,終端會顯示連接過程的相關信息.連接成功后會顯示所獲取的IP和DNS.

用ifconfig命令查看網絡接口的信息可以發現在網絡信息中多了一個ppp0設備,顯示的IP跟撥號時獲取后的IP一樣.這證明ppp0就是系統通過3G網絡連接Internet的設備了.同時在/etc/ppp目錄下,自動生成了一個resolv.conf文件,里面有DNS的地址信息,只要把/etc/ppp/resolv.conf復制到/etc/resolv.conf,這樣就可以實現域名解析了,現用ping命令來測試一下.

[root@/mnt/yaffs]#ping www.baidu.com

PING www.baidu.com(121.14.89.10):56 data bytes

64 bytes from 121.14.89.10:seq=0 ttl=56 time=61.818 ms

Ping測試成功,3G上網已經實現了.如果需要斷開網絡連接則運行kill來關掉pppd的線程就可以了.

#kill$(pidof pppd)

3 QT網絡播放器的實現

3.1 MPlayer移植

MPlayer是一款開源多媒體播放器,支持大部分常用的視頻格式,同時支持RTP、RTSP、HTTP、FTP、MMS等網絡協議,所以大部分的網絡流媒體都可以通過直接輸入URL的方式來進行播放[6].在X11,Xmga,DirectX等顯示架構中可以通過-geometry控制視頻的定位輸出.而在嵌入式系統中使用的顯示設備為fbdev,MPlayer源碼不支持在fbdev的定位播放.筆者通過分析MPlayer源碼,添加了fbdev定位播放的功能.MPlayer播放流程如下圖3-1所示.

圖3 -1 MPlayer的播放流程

在嵌入式環境下,視頻輸出主要通過vo_s3cfb.c和vo_fbdev.c控制.而實際的輸出由vo_fbdev.c中的draw_slice函數控制.要實現視頻輸出的定位則要從這個函數入手.可以通過在vo_fbdev,c中添加geometry的庫從而實現定位播放.添加流程如下圖3-2所示.

其中,fb_x、fb_y為自定義的以像素為單位的定位平移量.偏移的參考原點為LCD的最左上角.修改完源代碼之后就可以進行交叉編譯了.MPlayer的移植過程不會太復雜,關鍵是配置.下面簡單介紹一下如何配置MPlayer,由于篇幅有限這里只列出部分內容.

./configure--cc=arm-linux-gcc //選用系統默認交叉編譯器,筆者使用的是3.4.1

--target=arm-armv4-linux //支持armv4架構的arm-linux

--enable-fbdev //支持開發板的fb設備

--disable-mp3lib //不使用內部的MP3界面庫

--disable-mad //支持mad作為MP3解碼的庫,這個需要另外編譯的

--enable-static //靜態編譯

--with-extraincdir=/usr/local/arm/3.4.1/arm-linux/sys-include/:/usr/local/arm/3.4.1/lib/include //指明libmad的頭文件--with-extralibdir=/usr/local/arm/3.4.1/arm-liunx/lib:/usr/local/arm/3.4.1/lib/lib//指明libmad的庫地址

配置的時候可以建一個腳本文件.這里就不詳細講述了.配置完之后就直接make.中途可能會出現一些錯誤.可以根據具體情況對源代碼進行修改,直到編譯成功為止.編譯成功后,需要把生成的可執行程序mplayer放到嵌入式系統中進行測試運行.視頻輸出位置是通過-geometry參數進行輸出位置控制.例如,執行./mplayer panda.mpg-vo fbdev-geometry+50+50,這樣視頻的輸出參考點就會從原來的最左上角(0,0)的位置移動到(50,50)的位置.具體播放定位位置要根據QT的顯示窗口位置來設定.

3.2 QT代碼編寫及移植

3.2.1 UI設計

由于整個播放器的界面所占篇幅較大,這里只截取按鈕布局,如圖3-3所示.

圖3 -3 播放器按鈕布局

在MPlayer的基礎上,用QT界面對播放器實現來播放、暫停、停止、全屏播放的控制功能.同時,還增加了播放列表功能,可以通過選擇播放列表中的文件來實現本地以及URL的播放.

3.2.2 控制原理

在這個播放器中QT界面用于實現對MPlayer的可視化控制.在QT中創建一個線程調用MPlayer并且通過輸入MPlayer的控制命令來實現暫停,停止等功能.具體的控制原理如圖3-4所示.

圖3 -4 QT對MPlayer實現控制

在s_mp中如果需要可以根據QT播放器窗口的位置來控制MPlayer視頻的輸出位置.圖中的s_mp輸入命令為640x480全屏顯示.如果需要定位視頻輸出位置,則在后面添加-vo fbdev-geometry+x+y參數(x、y為具體偏移量)即可.詳細的控制參數可以參考MPlayer的使用說明.

3.2.3 Qt移植

播放界面的具體移植過程分為3個驟步,分別為:交叉編譯、尋找需要的庫文件和編寫運行腳本.下面就每一步進行簡單的說明.

(1)交叉編譯.QT官網中有提供QtEmbedded的開發包,安裝成功后,用里面的命令編譯出來的程序可以在ARM-linux嵌入式系統中運行.可以輸入以下命令進行編譯.

#/opt/local/Trolltech/QtEmbedded-4.5.3/bin/qmake-project//建立工程,需要制定為QtEmbedded的make.

#/opt/local/Trolltech/QtEmbedded-4.5.3/bin/qmake //生成頭文件和Makefile

#make //編譯

在編譯成Embedded版之前,最好make clean一下,同時確保所寫的程序可以編譯成x86或x11的版本,而且編譯后可以在PC中運行.成功編譯之后,在播放器的工程目錄下就會有一個二進制可執行文件.但是直接下載到板上運行會出錯的,原因是它依賴于很多庫文件.必須指定了庫文件的路徑,程序才可以正常運行.

(2)尋找需要的庫文件.在工程目錄下運行arm-linux-readelf命令可以查看文件所依賴的庫文件.

#arm-linux-readelf-d MicrophoneTV

Dynamic segment at offset 0x17340 contains 31 entries:

Tag Type Name/Value

0x00000001(NEEDED) Shared library:[libQtGui.so.4]

0x00000001(NEEDED) Shared library:[libts-0.0.so.0]

......

0x00000001(NEEDED) Shared library:[libc.so.6]

0x0000000f(RPATH) Library rpath:[/opt/local/Trolltech/Qtarm-4.5.3/lib]

這里的庫文件有四類:一是QtEmbedded的庫文件,二是arm-linux-gcc的庫文件,三是觸摸屏的庫文件,四是字體的庫文件.可以分別到各個對應的目錄去復制需要的庫文件.然后把它整理到一個文件夾,筆者用的文件夾命名為Qtlib.前面三類可以在上面的列表中看到,文字庫需要另外制作或者到網上去下載.把字體的庫文件放到Qtlib/fonts目錄下.另外還需要一個觸摸屏的校正程序,筆者用的版本為tslib-1.4,交叉編譯tslib之后把它里面的文件放到Qtlib/ts中.

(3)編寫運行腳本.這一步最為關鍵,這個要根據具體的嵌入式環境來編寫.下面是筆者根據使用的系統編寫的腳本.這個腳本的作用是設定環境變量,實質是指定程序運行所依賴的文件的路徑.

#!/bin/sh

rm-fr/tmp/* //清除內存

export TSLIB_CONSOLEDEVICE=none

//tslib運行需要的控制臺,默認為/dev/tty,none則為LCD;

export TSLIB_FBDEVICE='/dev/fb0'//這是LCD的設備名

export TSLIB_TSDEVICE='/dev/event0'//這是觸摸屏的設備名

export TSLIB_PLUGINDIR='/mnt/yaffs/Qtlib/ts/lib/ts'//觸摸屏的庫

export TSLIB_CALIBFILE='/mnt/yaffs/pointercal' //校正文件

export TSLIB_CONFFILE='/mnt/yaffs/Qtlib/ts/etc/ts.conf'//觸摸屏配置

export QTDIR='/mnt/yaffs/Qtlib' //Qt庫

export QT_QWS_FONTDIR='/mnt/yaffs/Qtlib/fonts'//字體庫

export PATH=$QTDIR/BIN:$PATH //命令程序

export QWS_DISPLAY=LinuxFb:/dev/fb0 //設定顯示設備

export QWS_SIZE=640x480 //分辨率

export QWS_SW_CURSOR=1 //顯示鼠標

export QT_ONSCREEN_PAINT=0

export POINTERCAL_FILE='/mnt/yaffs/pointercal'//觸摸校正值

export QWS_MOUSE_PROTO='tslib:/dev/event0'//觸摸屏為鼠標

export LD_LIBRARY_PATH=$QTDIR/:/lib:/usr/lib:$LD_LIBRARY_PATH

cd /mnt/yaffs/Microphone

./MicrophoneTV qws //運行播放界面程序

運行命令中的-qws參數是用來解除所運行程序對原來系統庫依賴關系.

按照本文中的方法重新配置內核,文件系統,然后寫到嵌入式系統中,同時把qt程序,程序所以依賴的庫,mplayer等文件拷貝到相應的文件夾,運行以上的腳本就可以讓播放器運行起來.

4結語

最后來看一下系統的運行效果.在運行播放界面之前,要先運行觸摸校正程序,然后進行網卡驅動加載和3G撥號,確保連接上互聯網后,可以直接在列表中添加一些URL或者本地文件.添加完成后,可以在列表中選擇要播放的頻道,然后點擊OK按鈕.播放列表如圖4-1所示.選擇完播放頻道后,點擊播放按鈕,就可以播放相應的視頻.在開發板的LCD中可以看到流暢的網絡電視畫面.圖4-2中為播放廈門衛視的效果圖.

到這里整個系統的設計已經完成了.本文介紹了在嵌入式linux平臺上3G網絡媒體移動播放終端的實現技術方案.詳細分析了3G網卡的硬件和驅動,3G網絡接入的ppp撥號實現,MPlayer嵌入式系統下定位播放,QT可視化控制MPlayer,QT移植等主要技術,在嵌入式平臺實現了3G網絡流媒體的播放功能.實驗測試結果表明,本終端既可以流暢播放本地視頻,也可以通過3G網絡實現在線視頻點播.經過轉化可以做成移動電視,網絡廣告機,視頻會議等終端設備.值得一提的是,整個系統的硬件配置還不到Android平臺最低配置要求的一半,可見若能實現本終端的產業化,無疑可以有效地降低生產成本,從而促進移動電視,網絡廣告機等產品的普及.

[1]Google公司,Android Porting Guide,[EB/OL].[2008-06-09].http://www.netmite.com/android/mydroid/development/pdk/docs/index.html

[2]北京博創.S2410經典實驗指導書[M].北京博創興業科技有限公司,2009.

[3]QUALCOMM公司,QSC6085 Hardware Training,[EB/OL].[2007-04].http://www.datasheet.co.kr/datasheet-html/Q/S/C/QSC6055_QUALCOMM.pdf.html

[4]宋寶華.Linux設備驅動開發詳解[M].北京:人民郵電出版社,2008.

[5]李善平,瀏文峰,王煥龍.Linux與嵌入式系統[M].北京:清華大學出版社,2006.

[6]MPlayer工作組,MPlayer-電影播放器,[EB/OL].[2010-02].http://www.mplayerhq.hu/DOCS/HTML/zh_CN/index.html

猜你喜歡
嵌入式設備系統
諧響應分析在設備減振中的應用
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
搭建基于Qt的嵌入式開發平臺
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
原來他們都是可穿戴設備
消費者報道(2014年7期)2014-07-31 11:23:57
主站蜘蛛池模板: 在线网站18禁| 色有码无码视频| 久久精品一卡日本电影| 97在线观看视频免费| 毛片基地美国正在播放亚洲 | 人妻中文久热无码丝袜| 日本伊人色综合网| 国产91蝌蚪窝| 女人18毛片一级毛片在线| 日日噜噜夜夜狠狠视频| 亚洲第一区在线| 婷婷久久综合九色综合88| 大陆精大陆国产国语精品1024| 国产精品主播| 重口调教一区二区视频| 国产午夜不卡| 国产剧情一区二区| 亚洲午夜综合网| 久久超级碰| 国产1区2区在线观看| 亚洲中文久久精品无玛| 波多野结衣亚洲一区| 午夜色综合| 亚洲AV无码乱码在线观看裸奔| 日本亚洲成高清一区二区三区| 人妻无码中文字幕第一区| 亚洲国产精品国自产拍A| 欧美v在线| 欧美日韩专区| 伊人激情久久综合中文字幕| 日本精品视频一区二区| 91极品美女高潮叫床在线观看| 97视频免费在线观看| www.亚洲一区二区三区| 99久久精品国产综合婷婷| 97在线观看视频免费| 玩两个丰满老熟女久久网| 国产欧美视频综合二区 | 婷婷综合色| 香蕉网久久| 亚洲乱码视频| 亚洲无线一二三四区男男| 成人午夜视频免费看欧美| 国产毛片久久国产| 一本视频精品中文字幕| 尤物成AV人片在线观看| 99草精品视频| 国产性精品| 99热这里只有精品在线观看| 国产99热| 黄色网站不卡无码| 色悠久久久久久久综合网伊人| 91娇喘视频| 狠狠躁天天躁夜夜躁婷婷| 天堂成人av| 中日韩一区二区三区中文免费视频| 亚洲第一色网站| 91视频日本| 亚洲欧美在线综合一区二区三区| 国产高清精品在线91| 国产丝袜丝视频在线观看| 欧美人在线一区二区三区| 91精品视频网站| 精品国产Ⅴ无码大片在线观看81| 亚洲成人精品| 天天操天天噜| 亚洲国产日韩欧美在线| 国产美女叼嘿视频免费看| 国产成人免费高清AⅤ| 亚洲bt欧美bt精品| 免费一极毛片| 国产精品久久自在自线观看| 国产欧美视频综合二区| 国产精品久久精品| 亚洲人在线| 日韩专区第一页| 一本色道久久88综合日韩精品| 免费aa毛片| 日韩一级毛一欧美一国产| 日韩少妇激情一区二区| 毛片在线看网站| 青草视频在线观看国产|