安卓java c++ 视频实时传输
要做一个视频实时传输并别图像追踪识别的项目。
本项目先采用TCP建立链接,然后在用UDP实时传输,用压缩图像帧内为JPEG的方式,加快传输速率。
下图是转的。。。
我采用的是第五种方案,为了牺牲了流量(局域网不怕),选了高FPS的。
安卓代码参考的别人的参考这里
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, Camera.PreviewCallback {
private final int TCP_PORT = 6666; //TCP通讯的端口号
private final int UDP_PORT = 7777; //UDP通讯的端口号
private final String SERVER_IP = "152.18.10.101"; //服务器端的IP地址
private Camera mCamera;
private Camera.Size previewSize;
private DatagramSocket packetSenderSocket; //发送图像帧的套接字
private long lastSendTime; //上一次发送图像帧的时间
private InetAddress serverAddress; //服务端地址
private final LinkedList<DatagramPacket> packetList = new LinkedList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
SurfaceHolder holder = surfaceView.getHolder();
holder.setKeepScreenOn(true);
holder.addCallback(this);
//开启通讯连接线程,连接服务端
new ConnectThread().start();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//获取相机
if (mCamera == null) {
mCamera = Camera.open(); //打开后摄像头
Camera.Parameters parameters = mCamera.getParameters();
//设置预览图大小
//注意必须为parameters.getSupportedPreviewSizes()中的长宽,否则会报异常
parameters.setPreviewSize(960, 544);
previewSize = parameters.getPreviewSize();
//设置自动对焦
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
mCame