|
组长
 
- UID
- 10176
- 帖子
- 152
- 精华
- 0
- 可用积分:
- 203 分
- 专家积分:
- 0 分
- 培训积分:
- 0 分
- 管理积分:
- 0 分
- 在线时间
- 55 小时
- 注册时间
- 2009-7-26
|
1#
大 中
小 发表于 2010-2-10 19:40 只看该作者
在OPhone上实现视频监控
最近准备做这方面的尝试,感兴趣的朋友可以一起探讨一下
% B; E/ k& U. D5 @4 |$ Harm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,原文出处:http://dev.chinamobile.com/cmdn/wiki/index.php?doc-view-1846.html
+ |7 F. C4 S, v" O! Q1 ]" a我们只做简洁、专业的嵌入式开发技术论坛。2009 年1 月,工信部宣布3G 牌照的正式发放,自此运营商全面布局各类业务竞争尤其激烈,3G 安防业务(手机视频)也包含其中,应该说手机视频监控业务是3G 时代的亮点业务,也是运营商炒作最热的亮点业务之一。然而,从消费和生活习惯来说,国内真正使用手机视频通话和手机电视的人群并不多,因此,手机视频监控受到运营商们的一致青睐,甚至被称为3G 业务中的“杀手级”业务!由于三大运营商有着巨大的客户资源,其推动的手机视频监控的业务得到了众多安防企业的追捧,各个安防厂商都希望在提供分得一杯羹。arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,0 y) u. X p1 [' d' B
目前国内很多的安防厂商都开发了自己的监控软件,但主要集中在[url=index.php?doc-view-1281]windows mobile[/url] 和[url=index.php?doc-view-1258]Symbian[/url]平台上面。[url=index.php?doc-view-1789]Android[/url]手机系统自推出以来得到了很多手机厂商的支持和相应,[url=index.php?doc-view-1676]Android系统[/url]得到了快速发展,而国内最大的移动运营商[url=index.php?doc-view-1689]中国移动[/url]也推出了基于Android的操作系统[url=index.php?doc-view-1401]OPhone[/url]。本文主要介绍如何在OPhone上实现视频监控。arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,0 B5 T' v9 M. U7 U+ Q
- 我们只做简洁、实用、专业的嵌入式开发技术论坛。6 @* u' ~4 x$ A# `0 F3 f8 ^7 Z
- N3 y- u9 i8 r* }: ?! M* @6 A! ?7 j3 P
[url=uploads/201001/1262853491Sia0Mj7a.jpg] [/url]
% v2 a. C5 M1 ^4 _2 \- 我们只做简洁、实用、专业的嵌入式开发技术论坛。登陆界面
( O- c+ v& ]4 Z0 t! j' ]www.mcuos.com- 我们只做简洁、实用、专业的嵌入式开发技术论坛。' c- M+ X4 T: h* V# i# I; r
S) @3 w" O9 D2 ]- 我们只做简洁、实用、专业的嵌入式开发技术论坛。[url=] 目录 [/url] - • [url=#1]一、登陆界面[/url]
- • [url=#3]二、主界面[/url]
- • [url=#5]三 现场界面[/url]
- • [url=#7]四、帮助界面[/url]
- • [url=#9]总结[/url]
- • [url=#11]作者[/url]
[显示部分][显示全部]
! w6 v: h3 p; d/ D# n7 R- 我们只做简洁、实用、专业的嵌入式开发技术论坛。 [url=index.php?doc-editsection-1846-1.html]编辑本段[/url] [url=#section]回目录[/url]一、登陆界面 我们只做简洁、专业的嵌入式开发技术论坛。* J% b& @$ ~: e# G8 O: [) ^+ C
登陆界面主要完成相关信息的输入,提供了记忆功能,方便用户快捷输入。
' _& V2 o% z' U: ~嵌入式开发联盟arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,' ?3 s! n6 w* f) S7 u
(1)图片替换
0 \9 |7 [7 c. D$ ~& S ^- W图片可以替换成其他的LOGO,方便不同的定制需求。只需修改android:background参数,指定相应的文件即可+ n# C! \+ k& X- u" h: l
<ImageView - 我们只做简洁、实用、专业的嵌入式开发技术论坛。" ?3 O! e" D1 h
android:id="@+id/ImageView01" www.mcuos.com& x: @4 H' }1 H4 y5 |; d& ]' R$ ?* {
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
$ F5 M0 h& q5 Z# }& Q" oarm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye, android:layout_height="150dip"
+ I% m1 X' _) M4 D8 {1 B0 b android:background="@drawable/logo"arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,6 J+ }3 U; l% W+ b& w0 c
></ImageView>我们只做简洁、专业的嵌入式开发技术论坛。/ n3 @$ {: ~# u) r, ~, j
" U1 I/ D% A7 A* darm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,
( }/ v+ O' {+ i; o(2)界面组织
. I D d: _. z7 _9 s E 界面编排采用了LinearLayout嵌套。使用LinearLayout中android rientation参数进行横竖组织。
5 f9 A' Z4 i8 [, P) U' }" P8 W6 y我们只做简洁、专业的嵌入式开发技术论坛。 整体的XML布局采用了vertical方式2 _4 z5 n+ ~6 Q8 t/ ]5 I# w
<LinearLayout7 T; v8 k+ y% Z" u
android:layout_width="fill_parent"
) u: ~7 O0 _* I android:layout_height="fill_parent"
# ?7 G6 C7 c+ X) k& S我们只做简洁、专业的嵌入式开发技术论坛。 android rientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"></LinearLayout>
0 k0 J4 c$ C ?3 ~$ H# `" u- d2 D- 我们只做简洁、实用、专业的嵌入式开发技术论坛。 在局部需要水平对齐的地方使用了horizontal方式- \2 l" {* K& q1 S; s5 z1 m4 L
<LinearLayoutarm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,9 Z. G' w* U: K+ a. ]* y
android:layout_width="fill_parent"
. e# [" Q9 z: x, t/ b android:layout_height="fill_parent"
?8 }8 h+ Q9 y4 o9 q android rientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android"></LinearLayout>
0 R9 ]+ @+ |4 m4 y" K# Jwww.mcuos.com- 我们只做简洁、实用、专业的嵌入式开发技术论坛。! W( i# y" B* ?/ z3 c
(3)LinearLayout 和AbsoluteLayout 区别/ M; Q( H( ]5 T4 c3 e3 G4 G/ @) z" Z
Android 的[url=index.php?doc-view-1788]UI[/url] 布局以Layout 作为容器,而LinearLayout和AbsoluteLayout 是两种最为常见的布局方式。LinearLayout以水平和垂直进行定位,采用的是相对坐标,而AbsoluteLayout 采用的是绝对坐标。如果要想实现软件界面在不同的手机上做到自适应,应该使用LinearLayout进行定位,避免使用AbsoluteLayout 。arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,5 {3 p5 H9 s5 b" V
[url=uploads/201001/1262853537JoX0JKXb.jpg] [/url]嵌入式开发联盟) A+ s- y. [1 H- [; j
主界面
! O; v$ v% U" k5 R6 q嵌入式开发联盟
8 N1 S" Z* U1 A嵌入式开发联盟我们只做简洁、专业的嵌入式开发技术论坛。# j: ~7 o4 K! O+ n2 A( e9 S
[url=index.php?doc-editsection-1846-3.html]编辑本段[/url] [url=#section]回目录[/url]二、主界面 主界面采用了现在手机流行的九宫格布局方式。九宫格的布局看起来比较复杂,但是由于系统提供了GridView控件,使得实现起来变得非常简单。www.mcuos.com2 h! b2 c$ _5 Y# a, u% \
GridView的XML文件布局如下
6 Y+ _( w( N d" F
1 `, ~3 ?0 }3 _) ]7 U) y<GridView android:id="@+id/GridView01" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="3" android:verticalSpacing="45dp" android:horiz android:columnWidth="80dp" android:gravity="center" android:layout_marginTop="10dip" android:layout_marginBottom="10dip" android:layout_marginLeft="10dip" android:layout_marginRight="10dip" android:focusable="false"></GridView>
$ r; g# u W: |, }' _0 w9 Iwww.mcuos.com为GridView添加相应函数:我们只做简洁、专业的嵌入式开发技术论坛。( }* n% t* y+ |' K, R
gridview.setOnItemClickListener(new ItemClickListener()); class ItemClickListener implements OnItemClickListener { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { switch(arg2) { case 0: break; case 1: break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: break; case 7: break; case 8: break; } } } / R4 Q" } A3 ~
为switch的分支提供不同的响应函数即可。九个自界面均采用了activity进行显示, 需要在AndroidManifest.xml添加不同的activity, 否则运行的时候会出现异常. 由于笔者对Android平台开发不是很熟悉,在这个地方也花费了不少的时间。
) ~1 r3 h, P& [9 J; r. I" b) d, T, H 由于篇幅和界面的相关性, 下面主要对现场界面和帮助界面进行说明,其他的不再重复+ o/ C" j6 f" t- w
- 我们只做简洁、实用、专业的嵌入式开发技术论坛。2 w) @0 W5 q( D1 Z0 Q( j) E6 j' t
arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,/ a, J. z" b% N6 O% M$ ^+ I
* P6 V1 I. _/ Zarm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,[url=index.php?doc-editsection-1846-5.html]编辑本段[/url] [url=#section]回目录[/url]三 现场界面 [url=uploads/201001/1262853626HVs65WCg.jpg] [/url]
$ }$ H' U/ s( U/ E/ U现场界面
6 O7 u( n! B! E+ D嵌入式开发联盟
% O2 l1 u6 L+ t, Y( R! o) T现场界面是整个工程当中最关键的部分,也是工作量最大的部分。主要包含了网络协议实现,视频的解码, 视频的显示,音频的解码,音频的采集和播放,录像文件的读写和界面控制逻辑模块。我们只做简洁、专业的嵌入式开发技术论坛。( M, H# e4 _% I2 X2 [. E7 f, m# F
网络协议部分主要是用了TCP协议。在使用OPhone平台使用网络连接时, 需要在AndroidManifest.xml文件当中添加网络访问的能力,<uses-permission android:name="android.permission.INTERNET"></uses-permission>,否则会报异常错误。- 我们只做简洁、实用、专业的嵌入式开发技术论坛。6 O0 l+ j) K( H! F- y
下面介绍下在客户端在OPhone平台下用Socket连接数据通信的过程& |; L% V/ Y, Z, i
; x G# ?1 ^+ E l- 我们只做简洁、实用、专业的嵌入式开发技术论坛。(1)创建socket连接
7 J. y0 S0 [2 ~* a1 E" M' e: Q" i T5 U( v) K* |
m_Socket = new Socket(“192.168.3.123”,”8002”);
8 O& [5 d. K, c5 z$ I9 c R+ dwww.mcuos.com
$ [" o( v _5 q5 z) e3 `0 _3 S) P. hwww.mcuos.com(2)获取Socket上的输入输出流,进行数据的收发- 我们只做简洁、实用、专业的嵌入式开发技术论坛。( N! M1 i {6 I. _7 A$ Y7 J
& ?3 N2 R! b! p- 我们只做简洁、实用、专业的嵌入式开发技术论坛。InputStream m_Reader = m_Socket.getInputStream();
2 [4 M/ X/ |0 x/ r+ P(3)关闭连接
) f4 b5 {9 e- ^; S我们只做简洁、专业的嵌入式开发技术论坛。www.mcuos.com1 U. V4 ?) A6 ?' ^4 K
m_Socket.shutdownInput(); m_Socket.shutdownOutput(); m_Socket.close(); www.mcuos.com: P* k; P+ X4 L
嵌入式开发联盟# m v9 n# i& d% r s; t$ Q
建议在步骤二完成后,创建一个单独的线程用于数据的接收,可以避免因长时间接收不到数据造成的阻塞现象。& i6 B+ W9 L8 \* S( b
- 我们只做简洁、实用、专业的嵌入式开发技术论坛。: M; N0 r! |/ u2 ]1 A2 |* Z
arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,2 M/ l) {! U$ Q6 x5 s* d: J$ s
Thread thread = new Thread(null, doBackgroundThreadProcessing, "Background"); thread.start(); public Runnable doBackgroundThreadProcessing = new Runnable() { public void run() { backgroundThreadProcessing(); } }; public void backgroundThreadProcessing() { while(isSocketRunning) { try { //接收数据 int iReadLenght = m_Reader.read(test); //处理数据,送去解码播放 } catch(Exception e) { e.printStackTrace(); break; } } System.out.println("Socket Client Exit"); }
, L& I U: z$ _/ r5 H视频和音频的解码, 录像文件的读写主要是采用了[url=index.php?doc-view-1306]Java[/url]的JNI技术,移植了相关的库文件。
( F' \. h4 n! e- 我们只做简洁、实用、专业的嵌入式开发技术论坛。解码库的移植可以参考OPhone开*坛上的一篇《H264解码器移植到OPhone》的文章。由于以前在Wince和Symbian平台上均开发过类似的解码库, 所以不用在移植解码库上花费时间。 如果没有相关的解码库,可以参考ffmpeg项目中的libavcodec进行移植。 这里好像一笔带过, 但相信做过解码库移植的朋友肯定能体会其中的滋味, 呵呵。
! {% N. m. N9 t! ?1 e4 s- 我们只做简洁、实用、专业的嵌入式开发技术论坛。 这里给大家提供几个JNI当中常见的类型转换,避免在相同的问题上浪费时间。
: B4 F! V& s$ `- w% ^- 我们只做简洁、实用、专业的嵌入式开发技术论坛。 (1). Char*转jbyteArray
0 v, ]# x7 e* ^/ v3 j3 P/ u |- 我们只做简洁、实用、专业的嵌入式开发技术论坛。0 l8 ^, u7 J4 ?9 o/ k; S( b
Thread thread = new Thread(null, doBackgroundThreadProcessing, "Background"); thread.start(); public Runnable doBackgroundThreadProcessing = new Runnable() { public void run() { backgroundThreadProcessing(); } }; public void backgroundThreadProcessing() { while(isSocketRunning) { try { //接收数据 int iReadLenght = m_Reader.read(test); //处理数据,送去解码播放 } catch(Exception e) { e.printStackTrace(); break; } } System.out.println("Socket Client Exit"); } arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,6 q) q- w/ u8 A3 U7 _8 G
(2). jbyteArray转char*: C' F, s6 d% k; J
. o; F4 _& p+ N9 e Z, l0 D! q6 J% zwww.mcuos.comchar * strBuffer = NULL; jsize len = env->GetArrayLength(pInBuffer); jbyte *arrayBody = env->GetByteArrayElements(pInBuffer, 0); if(len>0) { strBuffer = new char[len + 1]; memcpy(strBuffer, arrayBody, len); strBuffer[len] = 0; }
6 |: t+ Y' V8 d# A1 _, {* _ Y; `在Wince和Symbian平台上, 视频的现实可以直接通过写屏幕的方式实现, 效率更高。但是在搜索了相关的信息后,发现在OPhone上没有提供写屏的相关函数,所以采用了贴图的方式, 即将解码完的RGB565的数据写成BMP, 然后再ImageView上显示, 效率并没有先前担心的那么差, 可以接受。嵌入式开发联盟9 Q2 g. R" B! h' y
由于OPhone平台只允许在主线程中调用相关View的方法来更新界面。如果返回结果在新线程中获得,那么必须借助Handler来更新界面。所以视频的现实也采用了Handler来刷新显示。
5 m( }4 x+ ?2 G( W8 A( Wwww.mcuos.com
& Z1 `9 b; H K我们只做简洁、专业的嵌入式开发技术论坛。Handler myhandle = new Handler() { public void handleMessage(Message msg) { //刷新界面 super.handleMessage(msg); } }; - 我们只做简洁、实用、专业的嵌入式开发技术论坛。! P/ P0 x( k# Y' Z" U0 l( h
如果要全屏显示, 主要将bitmap进行缩放至屏幕大小,并进行90度的旋转即可嵌入式开发联盟; d7 u ]# N, a* W/ P# [
~) r, c" R6 ]+ _arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,Matrix matrix = new Matrix(); matrix.postScale(1, 1); matrix.postRotate(90); Bitmap temp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); Bitmap resizedBitmap =Bitmap.createScaledBitmap(temp, NewWidth , NewHeight, false);
( X! [. k5 {( n/ \嵌入式开发联盟我们只做简洁、专业的嵌入式开发技术论坛。* `" y" @( x, N9 G5 @$ y6 r' ~
. M# M( X3 ^1 R" u
[url=index.php?doc-editsection-1846-7.html]编辑本段[/url] [url=#section]回目录[/url]四、帮助界面 [url=uploads/201001/12628536805mla2aFM.jpg] [/url]- 我们只做简洁、实用、专业的嵌入式开发技术论坛。9 ~. u+ l; h) Y4 f
帮助界面arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,8 I8 u; h2 v$ w# S/ u! L# ]) [
8 v/ Q% E# F4 w. Z) ?$ Parm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,帮助界面主要采用了一个WebView显示一个网页。* I: S! r4 G& J3 N' |
arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,7 m) \4 k4 B0 E1 B1 I2 p& M8 G
我们只做简洁、专业的嵌入式开发技术论坛。2 s+ L. r. x% C$ S# r$ O
<?xml version="1.0" encoding="utf-8"?> & K( k% P4 Q) z" Z* T
<LinearLayout
# [. X* \- n5 C3 v x1 S- 我们只做简洁、实用、专业的嵌入式开发技术论坛。 xmlns:android="http://schemas.android.com/apk/res/android"
: i. u. a- T: X0 G0 C n我们只做简洁、专业的嵌入式开发技术论坛。 android:layout_width="fill_parent" 嵌入式开发联盟* B6 l+ C" l0 U7 T) h- |: K# v0 w
android:layout_height="fill_parent"> 我们只做简洁、专业的嵌入式开发技术论坛。$ U' z& H" L' \2 c# D, t
- 我们只做简洁、实用、专业的嵌入式开发技术论坛。/ ]: N2 D% p: S) N
<WebView
9 B$ K/ j. F, w4 Q2 a- 我们只做简洁、实用、专业的嵌入式开发技术论坛。 android:id="@+id/[url=index.php?doc-view-1500]web[/url]" - 我们只做简洁、实用、专业的嵌入式开发技术论坛。; f& t( [& a2 K5 `
android:layout_width="fill_parent"
& k0 Z) h1 N" J- n我们只做简洁、专业的嵌入式开发技术论坛。 android:layout_height="fill_parent"
' k- W5 e7 e7 Y# k* S android:text="Help" www.mcuos.com% M3 B* w, o3 w0 j8 b! x
/> arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,1 W9 Z0 d3 e% h6 _+ S8 U
</LinearLayout>
* S4 I0 \7 G2 T& N: Fwww.mcuos.com显示一个单纯的文本的网页很简单,只需将help.html放到res目录的Raw文件夹下面,按下面的代码即可完成调用:arm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,' ~5 R2 B3 g: M+ V4 t6 c
) G0 X8 H3 {4 z1 c+ Z2 n" b- 我们只做简洁、实用、专业的嵌入式开发技术论坛。WebView web = (WebView)findViewById(R.id.web); final String mimetype = "text/html"; final String encoding = "UTF-8"; String htmldata = "<html><body>boo</body></html>"; { String data = loadResToString(R.raw.help, this); if (data != null) htmldata = data; } web.loadDataWithBaseURL("fake://not/needed",htmldata,mimetype, encoding,"");
+ c9 a8 z% Z1 J4 ]" b2 @www.mcuos.com但是如果要显示带图片的网页,就必须将网页相关的图片放到assets目录下, 并将help.html链接图片的地方改为[url=file:///android_asset/xxx.JPG]file:///android_asset/xxx.JPG[/url]即可
, b+ h, ]# j4 d2 X9 c- 我们只做简洁、实用、专业的嵌入式开发技术论坛。 [url=uploads/201001/1262853721YTbM8Sqp.jpg] [/url]我们只做简洁、专业的嵌入式开发技术论坛。( a- w. X& r. J: ^
$ X# q9 d+ C# M+ q: ~5 larm,linux,winbond,nuvoton,w90p710,w90n745,开源,嵌入式,操作系统,嵌入式开发,嵌入式联盟,linux,ecos,uclinux,t-kernel,freeos,rtems,ucos,skyeye,[url=index.php?doc-editsection-1846-9.html]编辑本段[/url] [url=#section]回目录[/url]总结
$ ?' p- i" Q8 {% B嵌入式开发联盟 本文主要介绍了如何在OPhone平台下实现视频监控功能,为以后需要从事相关开发的程序员提供一个参考。由于自己本人也是一个OPhone的初学者, 难免文章中会出现一些纰漏, 欢迎大家交流指正。我们只做简洁、专业的嵌入式开发技术论坛。 M T% V t" u. U
- @- i, K; b) a
定位决定地位,格局决定结局;
|