从DVR接收rtsp流

时间:2016-05-16 02:41:01

标签: android video-streaming rtsp rtsp-client dvr

我有一台DVR作为连接到相机的服务器。我试图将相机的视图流式传输到我的Android手机中。我设法通过局域网完成了这项工作,但是通过3g /蜂窝

我已经完成了

  

端口转发

     

使用DynDNS

     

第三方应用程序称为MEye(仅适用于我的应用程序)

这是代码

public class liveActivity extends Activity{

final static String USERNAME = "admin";
final static String PASSWORD = "";
public static String domainName = "xxx.dvrdns.org";
public static int PORT = 2218;
public static final String URL = "rtsp://192.168.0.xxx:554/user=" + USERNAME + "&password=" + PASSWORD + "&channel=1&stream=0.sdp?";
public static final String URL2 = "rtsp://" + domainName + ":" + PORT + "/user=" + USERNAME + "&password=" + PASSWORD + "&channel=1&stream=1.sdp?real_stream--rtp-caching=100";

private MediaPlayer mPlayer1;
private MediaPlayer mPlayer2;
SurfaceHolder.Callback mCallback1;
SurfaceHolder.Callback mCallback2;

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

    mPlayer1 = new MediaPlayer();

    mCallback1 = new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder surfaceHolder) {

            try {

                mPlayer1.setDataSource(liveActivity.this, Uri.parse(URL2));
                mPlayer1.setDisplay(surfaceHolder);
                mPlayer1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mediaPlayer) {
                        mPlayer1.start();
                    }
                });
                mPlayer1.prepareAsync();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) {

        }

        @Override
        public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

            mPlayer1.release();
        }
    };

    final SurfaceView surfaceView1 =
            (SurfaceView) findViewById(R.id.surfaceView1);
    // Configure the Surface View.
    surfaceView1.setKeepScreenOn(true);
    // Configure the Surface Holder and register the callback.
    SurfaceHolder holder1 = surfaceView1.getHolder();
    holder1.addCallback(mCallback1);
    holder1.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}
P.S我从一位软件工程师那里听说RTSP仅供本地使用。这就是为什么我不能通过3g流式传输?

1 个答案:

答案 0 :(得分:0)

这是一个老问题,但以防万一......

鉴于您的解决方案是在局域网中工作,大概是通过WiFi,这种方法本身听起来不错。

您最有可能遇到的问题是,您的移动电话网络提供商不支持上传,下载或同时支持RTSP流。

这些类型的限制在移动网络中并不少见 - 例如,一些运营商用来阻止所有上行链路流媒体协议以避免VoIP服务。