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;
        }
    }