Tôi có một dự án Android, nơi tôi cần xây dựng ứng dụng khách để nhận luồng video UDP hoặc RTP unicast và phát lại chúng. Thật không may, tôi dường như không thể làm việc này và đã tìm kiếm rộng rãi cho một giải pháp!Phát video UDP trên Android
Tôi đang thử nghiệm trên Xoom (Android 3.2) và Nexus S (Android 2.3.6) và biết rằng họ có thể phát nội dung khi sử dụng MX Player (ứng dụng trình phát đa phương tiện của bên thứ ba) làm ứng dụng khách nhưng tôi không thể tải trình phát phương tiện gốc để phát lại nội dung. Tôi đã thử sử dụng cả một VideoView đơn giản và một MediaPlayer nhưng cả hai đều thất bại với cùng một mã lỗi và tôi thực sự không thể tìm thấy bất kỳ thông tin hữu ích nào.
Video được mã hoá H.264 với âm thanh aac.
Ngoài ra, máy chủ là giải pháp của bên thứ ba mà tôi không có quyền truy cập (ngoài việc chỉ định udp hoặc rtp) nhưng như tôi đã nói, khi sử dụng MX Player, các luồng có thể được phát.
Đây là máy nghe nhạc phương tiện truyền thông phần của mã của tôi:
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
MediaPlayer player = new MediaPlayer();
SurfaceView surface = (SurfaceView) findViewById(R.id.video);
player.setDisplay(surface.getHolder());
player.setDataSource(this, Uri.parse("udp://192.168.0.78:1234"));
player.prepare();
player.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
Log.d("SimpleVideoPlayer", "Starting player");
mp.start();
}
});
player.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.d("SimpleVideoPlayer", "error with code: " + what);
return false;
}
});
}catch(Exception e) {
e.printStackTrace();
}
}
Các lỗi Tôi nhận được là:
11-29 15:44:14.660: D/MediaPlayer(15451): Couldn't open file on client side, trying server side
11-29 15:44:14.670: E/MediaPlayer(15451): error (1, -2147483648)
11-29 15:44:14.670: W/System.err(15451): java.io.IOException: Prepare failed.: status=0x1
11-29 15:44:14.670: W/System.err(15451): at android.media.MediaPlayer.prepare(Native Method)
11-29 15:44:14.670: W/System.err(15451): at com.android.vidplayer.Main.onCreate(Main.java:26)
11-29 15:44:14.670: W/System.err(15451): at android.app.Activity.performCreate(Activity.java:4397)
11-29 15:44:14.670: W/System.err(15451): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1804)
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1856)
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.access$500(ActivityThread.java:125)
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1049)
11-29 15:44:14.670: W/System.err(15451): at android.os.Handler.dispatchMessage(Handler.java:99)
11-29 15:44:14.670: W/System.err(15451): at android.os.Looper.loop(Looper.java:132)
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.main(ActivityThread.java:4157)
11-29 15:44:14.670: W/System.err(15451): at java.lang.reflect.Method.invokeNative(Native Method)
11-29 15:44:14.670: W/System.err(15451): at java.lang.reflect.Method.invoke(Method.java:491)
11-29 15:44:14.670: W/System.err(15451): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
11-29 15:44:14.670: W/System.err(15451): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
11-29 15:44:14.670: W/System.err(15451): at dalvik.system.NativeStart.main(Native Method)
tôi đã thiết lập cho phép Internet cũng có.
Có ai có bất kỳ đề xuất nào không ?? Tôi không thể tìm thấy bất kỳ thông tin hữu ích ở bất cứ đâu.
Cảm ơn.
Bạn đã thử sử dụng 'player.prepareAysnc()' thay vì 'player.prepare()'? Bạn nên sử dụng 'preparAsync()' khi phát luồng. – Squonk