2016-05-16 2 views
1

У меня есть DVR как сервер, который подключен к камере. Я пытаюсь передать представление камеры в мой Android-телефон. Мне удалось сделать это через LAN, но не удалось через 3g/cellПолучить поток rtsp FROM DVR

Я сделал

Port Forwarding

использовать 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 для местного only.Is что, почему я не могу течь через 3g?

ответ

0

Это старый вопрос, но только в том случае, ...

Учитывая ваше решение работает в локальной сети, предположительно через WiFi, сам подход звучит хорошо.

Проблема, с которой вы, скорее всего, имеете, заключается в том, что поставщик сотовой сети не поддерживает потоки RTSP, загружающие, загружающие или и то, и другое.

Эти типы ограничений не являются редкостью в мобильных сетях - некоторые операторы, используемые для блокирования всех потоковых протоколов восходящей линии связи, чтобы избежать, например, VoIP-услуг.

Смежные вопросы