基于 的 手机视频实时传输
肖泽云
首先,简单介绍一下原理。主要是在手机客户端( )通过实现
接口,在其 重载函数里面获取
摄像头当前图像数据,然后通过 将图像数据和相关的用户名、命令等
数据传输到服务器程序中。服务器端( 端)采用 编写,通过监听相应的
端口,在获取数据后进行相应的命令解析和图像数据还原,然后将图像数据传
递至 控件中用于显示,这样就实现了手机摄像头的视频数据实时
传输到服务器上。如果需要将这些视频进行转发,通过服务器再将这些数据复
制转发即可。效果如下:
对于 客户端上主要有几个地方需要注意,第一个就是 通
信。 通信可以通过 类来实现,直接结合 来写入命
令,如下定义的一个专门用于发送命令的线程类,当要连接到服务器和与服务
器断开时,都需要发送命令通知服务器,此外在进行其他文字传输时也可以采
用该方法,具体代码如下:
发送命令线程
class !extends !"
private#$
public !%#&"
this'$
(
publicvoid%&"
实例化
try"
)'new%)*+)&$
'new
%)#,-%&&$
-%&$
.)!%&$
(catch%*/)0-&"
(catch%1,0-&"
(
(
(
如 果 是 采 用 发 送 文 件 , 则 可 以 通 过 ,- 将
1- 数 据 流 读 入 , 而 文 件 数 据 流 则 转 换 为
,-。如果需要在前面添加文字,同样也需要转换为
,然后写入 ,-。同样也可以通过定义一个线程类发送文件,
如下:
发送文件线程
class !extends !"
private#)$
private#-$
privateint-$
privatebyte234'newbyte356784$
private,-)$
private,--)$
public !%,-
-)+#)+#-+int-&"
this-)'-)$
this)')$
this-'-$
this-'-$
try"
-))%&$
(catch%1,0-&"
- %&$
(
(
publicvoid%&"
try"
将图像数据通过 发送出去
-'new%-+-&$
)'-#,-%&$
写入头部数据信息
#
)#'9*:;0encode%</,=0>1?0,@<A)A<@<+<
BCD<&$
byte342')##)%&$
)%2&$
1--)'new
1-%-)%&&$
int$
while%%'-)%2&&E'C5&"
)%2+6+&$
(
-).)!%&$
-))%&$
-)%&$
(catch %1,0-&"
- %&$
(
(
(
而获取摄像头当前图像的关键在于 %&重载函数里面,该
函数里面有两个参数,第一个参数为 34,为摄像头当前图像数据,通过
F1# 可以将该数据转换为图片文件,同时还可用对该图片进行压缩和裁
剪,将图片进行压缩转换后转换为 ,- 数据,即前面
发送文件线程类中所需的文件数据,然后采用线程发送文件,如下代码:
G,
publicvoid%b yte34+&"
TODOC#!)
如果没有指令传输视频,就先不传
if%E)>&
return$
if%-:H>:&"
-:AA$
return$
(
-:'6$
try"
if%E'null &
"
F1##'new
F1#%+>1+>!+>/#!+null&$
if%#E'null&
"
,-)'new
,-%&$
在此设置图片的尺寸和质量
#-)) I-#%new:%6+6+%int&
%>!:>!&+
%int&%>/#!:>/#!&&+
>J+)&$
).)!%&$
启用线程将图像数据发送出去
!!'new
!%)+-*)+)*+)&$
!)%&$
(
(
(catch%1,0-&"
- %&$
(
(
值得注意的是,在调试中 F1# 可能找不到,在模拟机上无法执行该
过程,但是编译后在真机中可以通过。此外,以上传输文字字符都是采用 *
编码,在服务器端接收时进行解析时需要采用对应的编码进行解析,否则可能
会出现错误解析。
客户端中关键的部分主要就这些,新建一个 项目(项目
名称为 ),在 布局中添加一个 B> 和两个按
钮,如下图所示:
然后在 9 中添加代码,具体如下:
packageK$
import91-$
import9,-$
import91,0-$
import9,-$
import9$
import9$
import9*/)0-$
import--$
import--?#$
import?#1B$
import1$
评论30
最新资源