android使用socket实现实时视频
https://www.cnblogs.com/lijiongquan/p/4729445.html
该视频实现是基于TCP/IP协议的Socket(客户端)和ServerSocket(服务端)类,发送视频也就是不间断的发送图片。具体如下:
PC服务端:socketService类开启服务及监听,线程类TheadServer处理socket连接,并调用另外一个线程类ThreadClient发送图片到到另外一台手机上
视频发送端:MainVideoActivity 为显示界面,子线程ClientThread处理图片并发送到服务器
视频接受端:MainActivity为显示界面,子线程RevImageThread为接受服务端发送过来的图片
PC端 socketService类:
package com.socket;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class socketService {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(3000);
System.out.println("begin");
while(true){
new Thread(new TheadServer(ss)).start();
}
}
}
TheadServer 类:
package com.socket;
import java.awt.Image;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;
import javax.imageio.ImageIO;
public class TheadServer implements Runnable {
private Socket s = null;
private BufferedImage bufferedImage;
public InputStream ins;
public TheadServer(ServerSocket ss ) throws IOException{
System.out.println("start thread");
this.s=ss.accept();
}
@Override
public void run(){
try {
ins = s.getInputStream();
bufferedImage = ImageIO.read(ins);
ins.close();
ThreadClient tc = new ThreadClient(bufferedImage);
new Thread(tc).start();
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();
}finally{
try {
if(!s.isClosed())
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();
}
}
}
}
ThreadClient类:
package com.socket;
import java.awt.Image;import java.awt.image.BufferedImage;import java.awt.image.RenderedImage;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;import java.io.OutputStream;import java.io.Serializable;import java.net.InetSocketAddress;import java.net.Socket;
import javax.imageio.ImageIO;
public class ThreadClient implements Runnable , Serializable {
private BufferedImage bufferedImage;
public ThreadClient(BufferedImage image){
this.bufferedImage = image;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
Socket s = new Socket();
//接受视频端IP和端口
s.connect(new InetSocketAddress("10.0.56.234", 40000), 2000);
if(s.isConnected() && !s.isClosed()){
System.out.println("Client:"+s.getRemoteSocketAddress().toString());
OutputStream oos = s.getOutputStream();
ImageIO.write(bufferedImage,"JPG",oos);
oos.write("\n".getBytes());
oos.flush();
oos.close();
s.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();
}
}
}
https://www.cnblogs.com/lijiongquan/p/4729445.html
该视频实现是基于TCP/IP协议的Socket(客户端)和ServerSocket(服务端)类,发送视频也就是不间断的发送图片。具体如下:
PC服务端:socketService类开启服务及监听,线程类TheadServer处理socket连接,并调用另外一个线程类ThreadClient发送图片到到另外一台手机上
视频发送端:MainVideoActivity 为显示界面,子线程ClientThread处理图片并发送到服务器
视频接受端:MainActivity为显示界面,子线程RevImageThread为接受服务端发送过来的图片
PC端 socketService类:
package com.socket;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class socketService {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(3000);
System.out.println("begin");
while(true){
new Thread(new TheadServer(ss)).start();
}
}
}
TheadServer 类:
package com.socket;
import java.awt.Image;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;
import javax.imageio.ImageIO;
public class TheadServer implements Runnable {
private Socket s = null;
private BufferedImage bufferedImage;
public InputStream ins;
public TheadServer(ServerSocket ss ) throws IOException{
System.out.println("start thread");
this.s=ss.accept();
}
@Override
public void run(){
try {
ins = s.getInputStream();
bufferedImage = ImageIO.read(ins);
ins.close();
ThreadClient tc = new ThreadClient(bufferedImage);
new Thread(tc).start();
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();
}finally{
try {
if(!s.isClosed())
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();
}
}
}
}
ThreadClient类:
package com.socket;
import java.awt.Image;import java.awt.image.BufferedImage;import java.awt.image.RenderedImage;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;import java.io.OutputStream;import java.io.Serializable;import java.net.InetSocketAddress;import java.net.Socket;
import javax.imageio.ImageIO;
public class ThreadClient implements Runnable , Serializable {
private BufferedImage bufferedImage;
public ThreadClient(BufferedImage image){
this.bufferedImage = image;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
Socket s = new Socket();
//接受视频端IP和端口
s.connect(new InetSocketAddress("10.0.56.234", 40000), 2000);
if(s.isConnected() && !s.isClosed()){
System.out.println("Client:"+s.getRemoteSocketAddress().toString());
OutputStream oos = s.getOutputStream();
ImageIO.write(bufferedImage,"JPG",oos);
oos.write("\n".getBytes());
oos.flush();
oos.close();
s.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace();
}
}
}