RTSP клиент для Андроид
Всем привет,подскажите пожалуйста как можно запустить потоковое видео с IP камеры в своем приложении? Пытался по такой схеме
import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Base64;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, MediaPlayer.OnPreparedListener{
final static String USERNAME = "admin";
final static String PASSWORD = "";
final static String RTSP_URL = "rtsp://admin:[email protected]:554/mode=real&idc=1&ids=1";
private MediaPlayer _mediaPlayer;
private SurfaceHolder _surfaceHolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
Window window = getWindow();
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.setBackgroundDrawableResource(android.R.color.black);
setContentView(R.layout.activity_main);
// Configure the view that renders live video.
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
_surfaceHolder = surfaceView.getHolder();
_surfaceHolder.addCallback(this);
_surfaceHolder.setFixedSize(320, 240);
}
@Override
public void onPrepared(MediaPlayer mp) {
_mediaPlayer.start();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
_mediaPlayer = new MediaPlayer();
_mediaPlayer.setDisplay(_surfaceHolder);
Context context = getApplicationContext();
Map<String, String> headers = getRtspHeaders();
Uri source = Uri.parse(RTSP_URL);
try {
// Specify the IP camera's URL and auth headers.
_mediaPlayer.setDataSource(context, source, headers);
// Begin the process of setting up a video stream.
_mediaPlayer.setOnPreparedListener(this);
_mediaPlayer.prepareAsync();
}
catch (Exception e) {}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
_mediaPlayer.release();
}
private Map<String, String> getRtspHeaders() {
Map<String, String> headers = new HashMap<String, String>();
String basicAuthValue = getBasicAuthValue(USERNAME, PASSWORD);
headers.put("Authorization", basicAuthValue);
return headers;
}
private String getBasicAuthValue(String usr, String pwd) {
String credentials = usr + ":" + pwd;
int flags = Base64.URL_SAFE | Base64.NO_WRAP;
byte[] bytes = credentials.getBytes();
return "Basic " + Base64.encodeToString(bytes, flags);
}
}
Но вместо видео - черный экран.Подскажите пожалуйста куда копать?В манифесте доступ к инету есть.
Ответы (1 шт):
Автор решения: Urban Side
→ Ссылка
Сделал через libvlc
package com.pedro.vlctestapp;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.pedro.vlc.VlcListener;
import com.pedro.vlc.VlcVideoLibrary;
import java.util.Arrays;
import org.videolan.libvlc.MediaPlayer;
/**
* Created by pedro on 25/06/17.
*/
public class MainActivity extends AppCompatActivity implements VlcListener, View.OnClickListener {
private VlcVideoLibrary vlcVideoLibrary;
private Button bStartStop;
private String[] options = new String[]{":fullscreen"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.activity_main);
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
bStartStop = (Button) findViewById(R.id.b_start_stop);
bStartStop.setOnClickListener(this);
vlcVideoLibrary = new VlcVideoLibrary(this, this, surfaceView);
vlcVideoLibrary.setOptions(Arrays.asList(options));
vlcVideoLibrary.play("rtsp://admin:@192.168.0.58:554/mode=real&idc=1&ids=1");
}
@Override
public void onComplete() {
Toast.makeText(this, "Playing", Toast.LENGTH_SHORT).show();
}
@Override
public void onError() {
Toast.makeText(this, "Error, make sure your endpoint is correct", Toast.LENGTH_SHORT).show();
vlcVideoLibrary.stop();
bStartStop.setText(getString(R.string.start_player));
}
@Override
public void onBuffering(MediaPlayer.Event event) {
}
@Override
public void onClick(View view) {
if (!vlcVideoLibrary.isPlaying()) {
vlcVideoLibrary.play("rtsp://admin:@192.168.0.58:554/mode=real&idc=1&ids=1");
bStartStop.setText(getString(R.string.stop_player));
} else {
vlcVideoLibrary.stop();
bStartStop.setText(getString(R.string.start_player));
}
}
}