基于socketandroid手机视频实时传输

基于socketandroid手机视频实时传输


2024年4月29日发(作者:)

基于Socket的Android手机视频实时传输

肖泽云

首先,简单介绍一下原理。主要是在手机客户端(Android)通过实现Came

wCallback接口,在其onPreviewFrame重载函数里面获取摄像头当前

图像数据,然后通过Socket将图像数据和相关的用户名、命令等数据传输到服

务器程序中。服务器端(PC端)采用C#编写,通过监听相应的端口,在获取数

据后进行相应的命令解析和图像数据还原,然后将图像数据传递至PictureBox

控件中用于显示,这样就实现了手机摄像头的视频数据实时传输到服务器上。如

果需要将这些视频进行转发,通过服务器再将这些数据复制转发即可。效果如下:

对于Android客户端上主要有几个地方需要注意,第一个就是Socket通信。

Socket通信可以通过Socket类来实现,直接结合PrintWriter来写入命令,如

下定义的一个专门用于发送命令的线程类,当要连接到服务器和与服务器断开时,

都需要发送命令通知服务器,此外在进行其他文字传输时也可以采用该方法,具

体代码如下:

/**发送命令线程*/

class MySendCommondThread extends Thread{

private String commond;

public MySendCommondThread(String commond){

d=commond;

}

publicvoid run(){

//实例化Socket

try {

Socket socket=new Socket(serverUrl,serverPort);

PrintWriter out = new PrintWriter(putStream());

n(commond);

();

} catch (UnknownHostException e) {

} catch (IOException e) {

}

}

}

如果是采用Socket发送文件,则可以通过OutputStream将ByteArrayInpu

tStream数据流读入,而文件数据流则转换为ByteArrayOutputStream。如果需

要在前面添加文字,同样也需要转换为byte,然后写入OutputStream。同样也

可以通过定义一个线程类发送文件,如下:

/**发送文件线程*/

class MySendFileThread extends Thread{

private String username;

private String ipname;

privateintport;

privatebytebyteBuffer[] = newbyte[1024];

private OutputStream outsocket;

private ByteArrayOutputStream myoutputstream;

public MySendFileThread(ByteArrayOutputStream

myoutputstream,String username,String ipname,int port){

utstream = myoutputstream;

me=username;

= ipname;

=port;

try {

();

} catch (IOException e) {

tackTrace();

}

}

publicvoid run() {

try{

//将图像数据通过Socket发送出去

Socket tempSocket = new Socket(ipname, port);

outsocket = putStream();

//写入头部数据信息

String

msg=oder.

encode

("PHONEVIDEO|"+username+"|","utf-8");

byte[] buffer= es();

(buffer);

ByteArrayInputStream inputstream = new


发布者:admin,转转请注明出处:http://www.yc00.com/web/1714328394a2425698.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信