Bonjour,

j'aimerais que mon application sache envoyé l'image de la caméra vers un autre téléphone en live sans enregistrement.

j'utilise les sockets pour la connexion.

du coté client j'ai le code suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.example.test;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.media.MediaPlayer;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.ParcelFileDescriptor;
import android.telecom.Call;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
 
import com.example.test.util.InfoServerSingleton;
 
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.SyncFailedException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
 
public class CameraDistantActivity extends AppCompatActivity implements SurfaceHolder.Callback {
 
private SurfaceView mPreview;
private MediaPlayer mp;
private SurfaceHolder holder;
private Socket client;
private Handler handler = new Handler();
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_camera_distant);
mPreview = (SurfaceView) findViewById(R.id.surfaceViewDistant);
holder = mPreview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mp = new MediaPlayer();
        Thread t = new Thread(){
 
public void Run()
            {
try {
client = new Socket(InfoServerSingleton.getInstance().getIp(),InfoServerSingleton.getInstance().getPort());
                } catch (IOException e) {
                    e.printStackTrace();
                }
 
handler.post(
new Runnable() {
@Override
public void run() {
                                ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(client);
try {
                                    pfd.getFileDescriptor().sync();
mp.setDataSource(pfd.getFileDescriptor());
                                    pfd.close();
mp.setDisplay(holder);
mp.prepareAsync();
mp.start();
                                } catch (SyncFailedException e) {
                                    e.printStackTrace();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                );
            }
        };
 
 
 
    }
 
@Override
public void surfaceCreated(SurfaceHolder holder) {
 
    }
 
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
 
    }
 
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
 
    }
}
et du coté server :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package com.example.testserver;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.SurfaceTexture;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.ParcelFileDescriptor;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;
 
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.SyncFailedException;
import java.net.ServerSocket;
import java.net.Socket;
 
public class MainActivity extends AppCompatActivity {
 
// User Interface Elements
VideoView mView;
    TextView connectionStatus;
    SurfaceHolder mHolder;
// Video variable
MediaRecorder recorder;
// Networking variables
private Handler handler = new Handler();
private ServerSocket serverSocket;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Thread sendVideo = new Thread(new SendVideoThread());
        sendVideo.start();
    }
 
 
 
 
public class SendVideoThread implements Runnable{
public void run(){
// From Server.java
try {
serverSocket = new ServerSocket(5000);
                    Socket client = serverSocket.accept();
final ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(client);
recorder = new MediaRecorder();
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(pfd.getFileDescriptor());
recorder.setVideoFrameRate(20);
recorder.setVideoSize(176,144);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
recorder.setPreviewDisplay(mHolder.getSurface());
 
try {
recorder.prepare();
                } catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
                } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
                }
recorder.start();
            } catch (Exception e){
handler.post(new Runnable() {
@Override
public void run() {
connectionStatus.setText("Error");
                    }
                });
                e.printStackTrace();
            }
// End from server.java
}
    }
}
je n'ai pas de message d'erreur mais rien ne se passe et via le code client je n ai pas l'impression que ca contact le server...