android无法播放此视频,android rtsp直播 - “无法播放此视频”

public class MainActivity extends Activity

{

VideoView vv;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

vv = (VideoView)findViewById(R.id.videoView);

Uri uri;

uri=Uri.parse("rtsp://user:pass@192.168.x.x:554/cam/realmonitor?channel=1&subtype=1");

vv.setVideoURI(uri);

vv.start();

}

}

我正在使用上面的代码,尝试播放我的IP直播相机流 . 使用的URI在VLC播放器中使用时有效 . 我的清单中也设置了Internet权限 . 但是当我在我的模拟器或现场设备上运行应用程序时,我收到“无法播放此视频”错误 .

logcat中弹出的错误是:

08-31 09:21:15.602 2487-2487/package D/MediaPlayer: Couldn't open file on client side, trying server side

08-31 09:21:15.612 2487-2503/package W/MediaPlayer: info/warning (701, 0)

08-31 09:21:15.666 2487-2502/package E/MediaPlayer: error (1, -2147483648)

08-31 09:21:15.725 2487-2487/package E/MediaPlayer: Error (1,-2147483648)

08-31 09:21:15.725 2487-2487/package D/VideoView: Error: 1,-2147483648

我尝试过使用媒体播放器进行设置:

public class MainActivity extends Activity implements MediaPlayer.OnPreparedListener, SurfaceHolder.Callback

{

final static String USERNAME = "user";

final static String PASSWORD = "pass";

final static String RTSP_URL = "rtsp://192.168.x.x:554/cam/realmonitor?channel=1&subtype=00";

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);

SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView);

_surfaceHolder = surfaceView.getHolder();

_surfaceHolder.addCallback(this);

_surfaceHolder.setFixedSize(320, 240);

}

@Override

public void surfaceChanged(SurfaceHolder sh, int f, int w, int h) {}

@Override

public void surfaceCreated(SurfaceHolder sh) {

_mediaPlayer = new MediaPlayer();

_mediaPlayer.setDisplay(_surfaceHolder);

Context context = getApplicationContext();

Map headers = getRtspHeaders();

Uri source = Uri.parse(RTSP_URL);

try {

_mediaPlayer.setDataSource(context, source, headers);

_mediaPlayer.setOnPreparedListener(this);

_mediaPlayer.prepareAsync();

}

catch (Exception e) {}

}

@Override

public void surfaceDestroyed(SurfaceHolder sh) {

_mediaPlayer.release();

}

private Map getRtspHeaders() {

Map headers = new HashMap();

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);

}

@Override

public void onPrepared(MediaPlayer mp) {

_mediaPlayer.start();

}

}

上面的代码取自here,但它们都不起作用 . 我也尝试过没有结果的Vitamio库 . 我所做的一切似乎都在起作用 .

我错过了某处的小细节吗?我假设URI很好,因为它适用于VLC播放器就好了 . 在某些时候,模拟器也提供了“java.io.FileNotFoundException:No content provider”,但不再是 .

有一次,我在想,认证可能是一个问题,所以我使用VLC流式传输IP摄像机,没有用户/通行证,并尝试连接,但这也不起作用,所以我假设它成功认证 .

我也尝试将URL传递为“rtsp:// user:pass@192.168.x.x:554 /”,这也适用于VLC播放器 . 但不是在我的应用程序中 .

我已经尝试了所有能找到的东西,但都没有成功 . 如果有人能够提供帮助,将不胜感激!

编辑1:VideoView能够成功播放预先录制的剪辑,例如“rtsp://mpv.cdn3.bigCDN.com:554 / bigCDN / definst / mp4:bigbuckbunnyiphone_400.mp4”与vitamio和mediaplayer相同 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值