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条)