第18章 音视频开发¶
学习目标:掌握Android音视频开发,理解MediaPlayer、ExoPlayer、Camera2 API等技术。
预计学习时间:5-7天 实践时间:2-3天
目录¶
1. 音频播放¶
1.1 MediaPlayer¶
Kotlin
val mediaPlayer = MediaPlayer().apply {
setDataSource(audioUrl)
prepare()
start()
}
// 释放资源
mediaPlayer.release()
1.2 ExoPlayer(推荐)¶
Kotlin
val player = ExoPlayer.Builder(context).build()
val mediaItem = MediaItem.fromUri(videoUrl)
player.setMediaItem(mediaItem)
player.prepare()
player.play()
2. 视频播放¶
2.1 VideoView¶
Kotlin
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
videoView.setVideoURI(videoUri)
videoView.start()
2.2 SurfaceView + MediaPlayer¶
Kotlin
class VideoSurfaceView(context: Context) : SurfaceView(context), SurfaceHolder.Callback {
private val mediaPlayer = MediaPlayer()
init {
holder.addCallback(this)
}
override fun surfaceCreated(holder: SurfaceHolder) {
mediaPlayer.setDisplay(holder)
mediaPlayer.setDataSource(videoPath)
mediaPlayer.prepare()
mediaPlayer.start()
}
}
3. 音频录制¶
Kotlin
// 注意:无参 MediaRecorder() 在 API 31+ 已弃用,需传入 Context
val mediaRecorder = MediaRecorder(context).apply {
setAudioSource(MediaRecorder.AudioSource.MIC)
setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
setAudioEncoder(MediaRecorder.AudioEncoder.AAC)
setOutputFile(outputPath)
prepare()
start()
}
// 停止录制
mediaRecorder.stop()
mediaRecorder.release()
4. 视频录制¶
4.1 Camera2 API¶
Kotlin
val cameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager
val cameraId = cameraManager.cameraIdList[0]
cameraManager.openCamera(cameraId, object : CameraDevice.StateCallback() {
override fun onOpened(camera: CameraDevice) {
// 相机已打开
}
override fun onDisconnected(camera: CameraDevice) {}
override fun onError(camera: CameraDevice, error: Int) {}
}, null)
4.2 CameraX(推荐)¶
Kotlin
val preview = Preview.Builder().build()
val imageCapture = ImageCapture.Builder().build()
val videoCapture = VideoCapture.withOutput(Recorder.Builder().build())
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
preview,
imageCapture,
videoCapture
)
5. 实践练习¶
练习1:音乐播放器¶
任务:实现完整的音乐播放器
要求: - 播放/暂停/下一首 - 进度条控制 - 后台播放
练习2:视频录制应用¶
任务:实现视频录制功能
要求: - CameraX相机预览 - 录制视频 - 保存到相册
本章小结¶
核心要点¶
- ExoPlayer是推荐的音视频播放方案
- CameraX简化相机开发
- 注意权限申请和生命周期管理
下一步¶
完成本章学习后,请进入第19章:模块化与组件化架构。
本章完成时间:预计5-7天