一.Android视频播放这里做个简单介绍,视频播放主要有三种方式:
(获取本地应用assets raw文件位置:"file:///android_asset/文件名" "android.resource://" + getPackageName() + "/" +R.raw.alarm)
1.使用自带播放器。
Intent intent=new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///mnt/sdcard/big_buck_bunny.mp4");
intent.setDataAndType(uri, "video/mp4");
startActivity(intent);
2.使用VideoView播放。
VideoView video = (VideoView)findViewById(R.id.videoView1);
//VideoView与MediaController进行关联
MediaController media= new MediaController(this);
Uri uri = Uri.parse("file:///mnt/sdcard/big_buck_bunny.mp4");
video.setVideoURI(uri);
video.setMediaController(media);
public class MainActivity extends Activity implements Callback {
private MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SurfaceView surface = (SurfaceView) findViewById(R.id.surfaceView1);
SurfaceHolder myHolder = surface.getHolder();//得到SurfaceView的控制接口
myHolder.addCallback(this);//得到当前的回调接口
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mp = new MediaPlayer();//surface创建后再初始化MediaPlayer
mp.setDisplay(holder);//视频显示在SurfaceView上
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);//媒体声音类型
try {
mp.setDataSource("/mnt/sdcard/big_buck_bunny.mp4");
mp.prepare();
mp.start();
} catch (IllegalArgumentException e) {
} catch (SecurityException e) {
} catch (IllegalStateException e) {
} catch (IOException e) {
}
}
@Override
public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mp.release();
}
}
二.视频直播使用的是百度云直播(https://cloud.baidu.com/doc/Downloadcenter/player.html#.E6.92.AD.E6.94.BE.E5.99.A8.20Android.20SDK)这里简单介绍下播放端:
1.jar包和so库加入到工程中,
将以下权限加入到您的AndroidManifest.xml中,
2.初始化
private void init() {
/**
* 设置ak
*/
BDCloudVideoView.setAK("");
RelativeLayout viewHolder = (RelativeLayout) findViewById(R.id.view_holder);
mediaController = (SimpleMediaController) findViewById(R.id.media_controller_bar);
mVV = new BDCloudVideoView(this);
mVV.setVideoPath("rtmp://live.hkstv.hk.lxdns.com/live/hks");
mVV.setBufferTimeInMs(100);//缓冲时间
mVV.setVideoScalingMode(BDCloudVideoView.VIDEO_SCALING_MODE_SCALE_TO_MATCH_PARENT);
/**
* 注册listener
*/
mVV.setOnPreparedListener(this);
mVV.setOnCompletionListener(this);
mVV.setOnErrorListener(this);
mVV.setOnInfoListener(this);
mVV.setOnBufferingUpdateListener(this);
mVV.setOnPlayerStateListener(this);
RelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams(-1, -1);
rllp.addRule(RelativeLayout.CENTER_IN_PARENT);
viewHolder.addView(mVV, rllp);
mediaController.setMediaPlayerControl(mVV);
mVV.start();//播放
}
@Override
protected void onRestart() {
super.onRestart();
if (mVV != null) {
mVV.start();
mVV.enterForeground();
}
}
@Override
protected void onStop() {
if (mVV != null) {
mVV.pause();//或stopPlayback()
mVV.enterBackground();
}
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mVV != null) {
mVV.stopPlayback();
}
}
来源 http://blog.csdn.net/a704755096/article/details/48786761
附:视频录制
try {
File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Video");
if(!dir.exists()){
dir.mkdir();
}
File myRecAudioFile = File.createTempFile("video", ".3gp",dir);//创建临时文件
recorder = new MediaRecorder();//获取媒体对象
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
recorder.setPreviewDisplay(mSurfaceHolder.getSurface());//预览
Camera c = Camera.open();
c.setDisplayOrientation(90);
c.unlock();
recorder.setCamera(c);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//视频源
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //录音源为麦克风
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//输出格式为3gp
recorder.setVideoSize(480, 800);//视频尺寸
recorder.setVideoFrameRate(15);//视频帧频率
recorder.setVideoEncodingBitRate(1024*1024);//清晰度比特率
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);//视频编码
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音频编码
recorder.setMaxDuration(10000);//最大期限
recorder.setOutputFile(myRecAudioFile.getAbsolutePath());//保存路径
recorder.prepare();
recorder.start();
} catch (IOException e) {
e.printStackTrace();
}