我设法从这个网址播放实时流
rtsp://192.168.0.18:554/user=admin&password=&channel=1&stream=0.sdp?
但是我想将这个流下载到一个临时文件然后在本地播放,这样我就可以让缓冲时间看起来很短(可能延迟2-4秒)
是否可以使用rtsp
执行此操作?或者我是否必须使用http
?因为此网址仅适用于rtsp
协议
如果是这样,一些例子可以帮助我很多
我的代码示例
cA.mPlayer1 = new MediaPlayer();
try {
cA.mPlayer1.setDataSource("rtsp://192.168.0.18:554/user=admin&password=&channel=1&stream=0.sdp?");
cA.mPlayer1.prepareAsync();
cA.mPlayer1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
cA.mPlayer1.start();
Toast.makeText(getBaseContext(), "Connecting...", Toast.LENGTH_LONG).show();
}
});
} catch (IOException e) {
e.printStackTrace();
}
cA.mCallback1 = new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
cA.mPlayer1.setDisplay(surfaceHolder);
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
};
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(cA.mCallback1);
holder1.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
答案 0 :(得分:0)
您无法使用MediaPlayer
将Raw流保存在文件中。你可以使用其中一个:
使用'vlc'保存流如下: https://wiki.videolan.org/Documentation:Streaming_HowTo/Receive_and_Save_a_Stream/
或使用'VLC lib'for android可以从以下位置下载: https://github.com/mrmaffen/vlc-android-sdk
使用FFMPEG
库在SD卡中本地录制RTSP录音:
1-从实时流中捕获或解码RAW帧并将其传递给ffmpeg并将其保存为.h264格式的SD卡。
2-然后再次选择.h264原始文件并使用ffmpeg对文件进行解码,并将扩展名为.mp4的文件保存到SD卡中。
3-以编程方式删除.h264文件,并仅保存.mp4或您想要的格式。 试试.mp4播放。