Libstreaming – использовать VLC как клиент RTSP

Я пытаюсь использовать VLC как клиент RTSP. Сервер RTSP основан на библиотеке libstreaming . Я использую код, приведенный в первом примере :

  // Sets the port of the RTSP server to 1234 Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit(); editor.putString(RtspServer.KEY_PORT, String.valueOf(1234)); editor.commit(); // Configures the SessionBuilder SessionBuilder.getInstance() .setSurfaceView(mSurfaceView) .setPreviewOrientation(90) .setContext(getApplicationContext()) .setAudioEncoder(SessionBuilder.AUDIO_NONE) .setVideoEncoder(SessionBuilder.VIDEO_H264); // Starts the RTSP server this.startService(new Intent(this,RtspServer.class)); 

Запустится приложение для Android; Я пытаюсь получить доступ к потоку с помощью VLC ( open a stream ) и этот URL:

 rtsp://192.168.43.250:1234 

Устройство подключено к той же сети (я могу пинговать его), но ничего не происходит в Android-приложении и VLC отображается окно «не удалось подключиться».

Любая идея, где проблема? Может быть, плохой URL-адрес, но я не могу найти подробный пример этой ситуации.

    Он выбрасывает нулевой указатель, проверяет logcat.

    Вы должны указать url как rtsp: // ip: 1234? H264 = 200-20-320-240

    200 – buf 20 – fps 320 – разрешение w 240 – разрешение h

    У меня были подобные проблемы. Вот мое решение.

    1. Убедитесь, что вы импортировали библиотеку в качестве импортированного модуля через студию Android

    2. Дайте вашему манифесту разрешение на использование необходимых ресурсов

    3. Используйте этот код для вас. MainActivity:

       public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, RtspServer.CallbackListener, Session.Callback{ private final static String TAG = "MainActivity"; private SurfaceView mSurfaceView; private Session mSession; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); mSurfaceView = (SurfaceView) findViewById(R.id.surface); // Sets the port of the RTSP server to 1234 SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit(); editor.putString( RtspServer.KEY_PORT, String.valueOf(1234)); editor.commit(); // Configures the SessionBuilder mSession = SessionBuilder.getInstance() .setCallback(this) .setSurfaceView((net.majorkernelpanic.streaming.gl.SurfaceView) mSurfaceView) .setPreviewOrientation(90) .setContext(getApplicationContext()) .setAudioEncoder(SessionBuilder.AUDIO_AAC) .setAudioQuality(new AudioQuality(8000, 16000)) .setVideoEncoder(SessionBuilder.VIDEO_H264) //.setVideoQuality(new VideoQuality(320,240,20,500000)) .build(); mSurfaceView.getHolder().addCallback(this); ((net.majorkernelpanic.streaming.gl.SurfaceView) mSurfaceView).setAspectRatioMode(net.majorkernelpanic.streaming.gl.SurfaceView.ASPECT_RATIO_PREVIEW); String ip, port, path; // Starts the RTSP server this.startService(new Intent(this,RtspServer.class)); Log.d("test", "1"); mSession.startPreview(); //camera preview on phone surface mSession.start(); } @Override public void onResume() { super.onResume(); mSession.stopPreview(); } @Override public void onDestroy() { super.onDestroy(); mSession.release(); mSurfaceView.getHolder().removeCallback(this); } //region ----------------------------------implement methods required @Override public void onError(RtspServer server, Exception e, int error) { Log.e("Server", e.toString()); } @Override public void onMessage(RtspServer server, int message) { Log.e("Server", "unkown message"); } @Override public void onBitrateUpdate(long bitrate) { } @Override public void onSessionError(int reason, int streamType, Exception e) { } @Override public void onPreviewStarted() { } @Override public void onSessionConfigured() { } @Override public void onSessionStarted() { } @Override public void onSessionStopped() { } @Override public void surfaceCreated(SurfaceHolder holder) { } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } //endregion } 
    4. Используя проигрыватель VLC, откройте открытый сетевой поток и введите

    Rtsp: // ip устройства android: 1234 <- этот порт жестко закодирован, поэтому не меняйте

    Когда я работал с libstreaming и VLC, я провел много времени с той же проблемой. Решение для меня состояло в том, чтобы использовать другую версию VLC. Например, он работал для меня на vlc ver. 1.0.5, но многие другие версии не воспроизводили поток.