将视频从Android流式传输到RTSP服务器

时间:2016-09-28 13:35:44

标签: java android rtsp

我需要将视频从Android手机流式传输到RTSP服务器,然后在另一部Android手机上接收此视频。我google了很多,但我没有找到一个很好的解决方案。我找到的所有内容都是libstreaming,但我无法在我的应用中运行它。

以下是我的示例代码:

private SurfaceView mSurfaceView;
   private Session mSession;
   private static RtspClient mClient;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mSurfaceView = (SurfaceView) findViewById(R.id.surface);
    mSurfaceView.getHolder().addCallback(this);

    initRtspClient();

   }

   @Override
   public void onDestroy() {
    mClient.release();
    mSession.release();
    mSurfaceView.getHolder().removeCallback(this);
    super.onDestroy();
   }

   @Override
   protected void onResume() {
    super.onResume();
    toggleStreaming();
   }

   @Override
   protected void onPause(){
    super.onPause();
    toggleStreaming();
   }

   private void initRtspClient() {
    mSession = SessionBuilder.getInstance()
    .setContext(getApplicationContext())
    .setAudioEncoder(SessionBuilder.AUDIO_NONE)
    .setAudioQuality(new AudioQuality(8000, 16000))
    .setVideoEncoder(SessionBuilder.VIDEO_H264)
    .setSurfaceView(mSurfaceView).setPreviewOrientation(0)
    .setCallback(this).build();

    mClient = new RtspClient();
    mClient.setSession(mSession);
    mClient.setCallback(this);
    mSurfaceView.setAspectRatioMode(SurfaceView.ASPECT_RATIO_PREVIEW);

    mClient.setServerAddress("176.120.25.62", 1235);
   }

   private void toggleStreaming() {
    if (!mClient.isStreaming()) {
        mSession.startPreview();
        mClient.startStream();
    } else {
        mSession.stopPreview();
        mClient.stopStream();
    }
   }

   @Override
   public void onSessionError(int reason, int streamType, Exception e) {
    switch (reason) {
        case Session.ERROR_CAMERA_ALREADY_IN_USE:
        break;
        case Session.ERROR_CAMERA_HAS_NO_FLASH:
        break;
        case Session.ERROR_INVALID_SURFACE:
        break;
        case Session.ERROR_STORAGE_NOT_READY:
        break;
        case Session.ERROR_CONFIGURATION_NOT_SUPPORTED:
        break;
        case Session.ERROR_OTHER:
        break;
    }

    if (e != null) {
        e.printStackTrace();
    }
   }

   @Override
   public void onRtspUpdate(int message, Exception exception) {
    switch (message) {
        case RtspClient.ERROR_CONNECTION_FAILED:
        exception.printStackTrace();
        break;
        case RtspClient.ERROR_WRONG_CREDENTIALS:
        exception.printStackTrace();
        break;
    }
   }

   @Override
   public void onPreviewStarted() {
   }

   @Override
   public void onSessionConfigured() {
   }

   @Override
   public void onSessionStarted() {
   }

   @Override
   public void onSessionStopped() {
   }

   @Override
   public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
   }

   @Override
   public void surfaceCreated(SurfaceHolder holder) {
   }

   @Override
   public void surfaceDestroyed(SurfaceHolder holder) {
   }

   @Override
   public void onBitrateUpdate(long bitrate) {
   }

logcat的:

09-28 21:05:23.357 16654-16654/shkatovl.btandroid I/Timeline: Timeline: Activity_launch_request time:6595904
09-28 21:05:23.507 16654-16664/shkatovl.btandroid W/art: Suspending all threads took: 5.493ms
09-28 21:05:23.618 16654-16654/shkatovl.btandroid I/MediaStream: Phone supports the MediaCoded API
09-28 21:05:23.678 16654-16937/shkatovl.btandroid D/RtspClient: Connecting to RTSP server...
09-28 21:05:23.778 16654-16654/shkatovl.btandroid D/VideoStream: Surface Changed !
09-28 21:05:23.908 16654-16935/shkatovl.btandroid V/VideoQuality: Supported resolutions: 1920x1080, 1280x720, 1280x960, 800x480, 768x432, 720x480, 640x480, 576x432, 480x320, 384x288, 352x288, 320x240, 240x160, 192x112, 176x144
09-28 21:05:23.908 16654-16935/shkatovl.btandroid V/VideoQuality: Supported frame rates: 15-15fps, 12-24fps
09-28 21:05:23.978 16654-16654/shkatovl.btandroid D/VideoStream: Surface Changed !
09-28 21:05:23.998 16654-16654/shkatovl.btandroid I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@3254450a time:6596541
09-28 21:05:24.118 16654-16654/shkatovl.btandroid W/System.err: java.net.ConnectException: failed to connect to /176.120.25.62 (port 1235): connect failed: ECONNREFUSED (Connection refused)
09-28 21:05:24.118 16654-16937/shkatovl.btandroid I/RtspClient: TEARDOWN rtsp://176.120.25.62:1235/ RTSP/1.0
09-28 21:05:24.118 16654-16654/shkatovl.btandroid W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:124)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at java.net.Socket.startupSocket(Socket.java:590)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at java.net.Socket.tryAllAddresses(Socket.java:128)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at java.net.Socket.<init>(Socket.java:178)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at java.net.Socket.<init>(Socket.java:150)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at net.majorkernelpanic.streaming.rtsp.RtspClient.tryConnection(RtspClient.java:309)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at net.majorkernelpanic.streaming.rtsp.RtspClient.access$500(RtspClient.java:53)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at net.majorkernelpanic.streaming.rtsp.RtspClient$2.run(RtspClient.java:250)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at android.os.Looper.loop(Looper.java:135)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at android.os.HandlerThread.run(HandlerThread.java:61)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err: Caused by: android.system.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at libcore.io.Posix.connect(Native Method)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:111)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:122)
09-28 21:05:24.128 16654-16654/shkatovl.btandroid W/System.err:     ... 13 more

所以我的问题是我的错误在哪里(我添加了编译到gradle和显示权限)或者如果你知道如何解决我的问题,请告诉我。

谢谢!

0 个答案:

没有答案
相关问题