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:
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
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) { } }
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...
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 } } }
Partager