Salut,
Je débute en Java et IOIO
Je souhaite transmettre les images vidéo d'un Android Serveur (Galaxy S 4.4.4) vers un Android Client (Elephone P6000 4.4.4) sur le port 8002 qui est en écoute.
Mais je n'ai pas d'erreur, mais pas de vidéo non plus.
le port d'écoute est ouvert 8002, lorsque je fais un échange de messages (dataOutputStream, dataInputStream) ça fonctionne.
L'Android Client fonctionne avec une vidéo issue de Youtube.
Les images de la camera de l'Android Serveur apparaissent uniquement sur L'Android Serveur (videoView) si je mets un port fermé exemple 50.
Si quelqu'un a une idée... là je suis perdu.
Merci
Le MainActivity du serveur
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 public class MainActivity extends ActionBarActivity implements SurfaceHolder.Callback { SurfaceHolder surfaceHolder; Socket socket = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Force screen orientation landscape StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()); ServerSocket s = null; // Bout le code qui affiche la camera sur l'Android serveur FrameLayout preview = (FrameLayout) findViewById(R.id.preview); Camera cameraObject = ShowMyCamera.isCameraAvailiable(Camera.CameraInfo.CAMERA_FACING_BACK); ShowMyCamera myCameraRun = new ShowMyCamera(this, cameraObject); preview.addView(myCameraRun); surfaceHolder = myCameraRun.getHolder(); surfaceHolder.addCallback(this); // Bout de code qui diffuse la video try { s = new ServerSocket(8002); socket = s.accept(); ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); MediaRecorder recorder = new MediaRecorder(); cameraObject.unlock(); recorder.setCamera(cameraObject); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); recorder.setVideoFrameRate(20); recorder.setPreviewDisplay(surfaceHolder.getSurface()); recorder.setOutputFile(pfd.getFileDescriptor()); recorder.prepare(); recorder.start(); } catch (IOException e) { e.printStackTrace(); } } // end onCreate
Le MainActivity du Client
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 public class MainActivity extends ActionBarActivity implements SurfaceHolder.Callback, MediaPlayer.OnPreparedListener, MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnVideoSizeChangedListener { MediaPlayer mediaPlayer; SurfaceHolder surfaceHolder; VideoView videoView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Force screen orientation landscape StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()); videoView = (VideoView)findViewById(R.id.videoView); surfaceHolder = videoView.getHolder(); surfaceHolder.addCallback(this); } @Override public void surfaceCreated(SurfaceHolder holder) { // TextView textViewIN = (TextView) findViewById(R.id.textViewIN); // TextView textViewOUT = (TextView) findViewById(R.id.textViewOUT); try { Socket socket = new Socket("192.168.0.20",8002); /* DataOutputStream dataOutputStream; DataInputStream dataInputStream; String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date()); dataOutputStream = new DataOutputStream(socket.getOutputStream()); dataInputStream = new DataInputStream(socket.getInputStream()); dataOutputStream.writeUTF("You are connected on "+"192.168.0.20"+":8002"); textViewOUT.setText("You are connected on "+"192.168.0.20"+":8002"); textViewIN.setText(dataInputStream.readUTF()); */ ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); mediaPlayer = new MediaPlayer(); mediaPlayer.setDisplay(surfaceHolder); mediaPlayer.setDataSource(pfd.getFileDescriptor()); mediaPlayer.prepare(); mediaPlayer.setOnBufferingUpdateListener(this); mediaPlayer.setOnPreparedListener(this); mediaPlayer.setOnCompletionListener(this); mediaPlayer.setOnVideoSizeChangedListener(this); mediaPlayer.start(); // textViewOUT.setText("Action : "+timeStamp); } catch (IllegalArgumentException | SecurityException | IllegalStateException | IOException e) { e.printStackTrace(); } }
Pour information la class ShowMyCamera
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
93
94
95
96
97
98 public class ShowMyCamera extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder sufaceHolder; private Camera cameraUse; private String TAG = "ShowMyCamera : "; public static Camera isCameraAvailiable(int cameraFacing){ Camera cameraAvailable = null; Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); for ( int cameraId = 0; cameraId < Camera.getNumberOfCameras(); cameraId++ ) { Camera.getCameraInfo(cameraId, cameraInfo); if (cameraInfo.facing == cameraFacing) { try { cameraAvailable = Camera.open(cameraId); } catch (Exception e) { } } } return cameraAvailable; } public ShowMyCamera(Context context, Camera camera) { super(context); cameraUse = camera; sufaceHolder = getHolder(); sufaceHolder.addCallback(this); } @Override public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { if (sufaceHolder.getSurface() == null) { // preview surface does not exist return; } // stop preview before making changes try { cameraUse.stopPreview(); } catch (Exception e) { // ignore: tried to stop a non-existent preview } // make any resize, rotate or reformatting changes here if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { cameraUse.setDisplayOrientation(90); } else { cameraUse.setDisplayOrientation(0); } // start preview with new settings try { cameraUse.setPreviewDisplay(sufaceHolder); cameraUse.startPreview(); } catch (Exception e) { Log.d(TAG, "Error display orientation camera preview: " + e.getMessage()); cameraUse.release(); cameraUse = null; } } @Override public void surfaceCreated(SurfaceHolder sufaceHolder) { if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { cameraUse.setDisplayOrientation(90); } else { cameraUse.setDisplayOrientation(0); } try { cameraUse.setPreviewDisplay(sufaceHolder); cameraUse.startPreview(); } catch (IOException e) { Log.d(TAG, "Error creating camera preview: " + e.getMessage()); cameraUse.release(); cameraUse = null; } }
Partager