我需要将视频从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和显示权限)或者如果你知道如何解决我的问题,请告诉我。
谢谢!