Потоковое видео UDP на Android - PullRequest
6 голосов
/ 29 ноября 2011

У меня есть проект Android, в котором мне нужно создать клиентское приложение для получения видеопотоков UDP или RTP одноадресной передачи и их воспроизведения.К сожалению, я не могу заставить это работать, и я много раз искал решение!

Я тестирую на Xoom (Android 3.2) и Nexus S (Android 2.3.6) и знаю, что они могут игратьсодержимое при использовании MX Player (стороннего приложения медиаплеера) в качестве клиента, но я не могу заставить собственный медиаплеер воспроизводить контент.Я пытался использовать как простой VideoView, так и MediaPlayer, но оба не удаются с одним и тем же кодом ошибки, и я не могу найти какую-либо полезную информацию.

Видео кодируется в формате H.264 с аудио aac.*

Кроме того, сервер является решением сторонней организации, к которому у меня нет доступа (кроме как для указания udp или rtp), но, как я уже сказал, при использовании MX Player можно воспроизводить потоки.

Вот часть моего кода для медиаплеера:

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

Я получаю сообщение об ошибке:

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)

Я также установил разрешения для Интернета.

У кого-нибудь есть предложения, пожалуйста?Я нигде не могу найти полезной информации.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 29 ноября 2011

Я не уверен, что Android изначально поддерживает UDP, поскольку его нет в списке сетевых протоколов

http://developer.android.com/guide/appendix/media-formats.html

Многие сторонние медиаплееры основаны на библиотеках FFMPEG. Возможно, вы захотите использовать FFMPEG в своем проекте, хотя это отдельная задача.

1 голос
/ 06 сентября 2013

Вы также можете осуществлять потоковую передачу через udp: //, используя библиотеку Vitamio (она использует ffmpeg за кулисами).http://www.vitamio.org/en/

...