2011-03-13 44 views
14

Tôi hiện đang làm việc trên truyền video giữa hai điện thoại Android. Tôi đã viết một ứng dụng có thể ghi video vào tệp sd (Sử dụng MediaRecorder); và tôi đã viết một ứng dụng khác có thể hiển thị video của tệp. Cả hai ứng dụng hoạt động hoàn hảo.Phát trực tiếp video trực tiếp giữa hai điện thoại Android

Tôi đã tìm thấy trang web về "Phát video với Android - mà không cần phải ghi vào tệp cục bộ" trong trang web sau. Đó chính là điều tôi muốn làm.

http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system

Tôi đã sửa đổi mã của mình.

Đối với máy ghi hình, nó là:

socket=severSocket.accept(); 
ParcelFileDescriptor=pfd; 
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(15); 
recorder.setVideoSize(320, 240); 
recorder.setPreviewDisplay(holder.getSurface()); 
pfd = ParcelFileDescriptor.fromSocket(socket); 
recorder.setOutputFile(pfd.getFileDescriptor()); 
recorder.prepare(); 
recorder.start(); 

Đối với Video Player:

Socket socket = new Socket(IP,PORT); 
mMediaPlayer = new MediaPlayer(); 
pfd = ParcelFileDescriptor.fromSocket(socket); 
mMediaPlayer.setDataSource(pfd.getFileDescriptor()); // <-- here is the problem 
mMediaPlayer.setDisplay(holder); 
mMediaPlayer.prepare(); 
mMediaPlayer.setOnBufferingUpdateListener(this);    
mMediaPlayer.setOnCompletionListener(this);    
mMediaPlayer.setOnPreparedListener(this);    
mMediaPlayer.setOnVideoSizeChangedListener(this); 
mMediaPlayer.start(); 

Chương trình lòng mMediaPlayer.setDataSource(pfd.getFileDescriptor()); trên MediaPlayer Tôi biết tôi didnt thiết lập DataSource một cách chính xác. Phải có các thiết lập bổ sung cho ParcelFileDescriptor để đưa vào MediaPlayer.

Có ai biết cách sử dụng ParcelFileDescriptor cho MediaPlayer không? Bất kỳ lời khuyên hữu ích hoặc lời khuyên sẽ được tốt đẹp ......

cảm ơn

sẽ

+0

Bạn có được nó làm việc? – B770

+1

có phù hợp với bạn không? nếu nó đang làm việc, plz cho tôi biết làm thế nào để giải quyết vấn đề này. – Aravi

+0

tôi rất muốn biết nếu bạn đã tìm ra điều này. tôi có chính xác cùng một vấn đề và câu trả lời dưới đây không giúp đỡ – steveh

Trả lời

1

Android không natively hỗ trợ video streaming trong Android 2.1 hoặc thấp hơn. Những gì chúng tôi đã làm là để có được hình ảnh khung theo khung; và đập từng ngọn lửa vào BYTE [] và gửi qua sử dụng Socket lớp. Và ở phía người nhận, chúng tôi xây dựng lại hình ảnh bằng cách sử dụng dữ liệu BYTE[] nhận được.

+1

Bạn có thể cho chúng tôi thấy một số mã mẫu không? –

4

trong chơi phía Video bạn phải tạo một ổ cắm hoan nghênh

ServerSocket welcomeSocket = new ServerSocket(portNumber); 
socket soc = welcomeSocket.accept(); 

và sử dụng

mMediaplayer.prepareAsync(); 

thay vì

mMediaplayer.prepare(); 
+0

hi, có vẻ như bạn chỉ đặt số cổng, địa chỉ IP của máy chủ lưu trữ như thế nào? –

Các vấn đề liên quan