MediaPlayer
MediaPlayer에서는 애플리케이션 리소스에 저장된 미디어 파일, 파일 시스템의 독립형 파일 또는 네트워크 연결을 통해 들어오는 데이터 스트림에서 모두 MediaPlayer API를 사용해서 오디오 또는 동영상을 재생할 수 있습니다.
MediaPlayer 구현하기
1. Manifest에 권한 선언
MediaPlayer를 사용하여 네트워크 기반 콘텐츠를 스트리밍하는 경우에는 애플리케이션에서 네트워크 액세스를 요청해야 합니다. 내부 미디어 파일만 사용한다면 해당 권한은 선언하지 않아도 됩니다.
<uses-permission android:name="android.permission.INTERNET" />
2. MediaPlayer 실행
- 로컬 리소스 : 애플리케이션의 res/raw 디렉터리에 저장된 로컬 원시 리소스를 통해 재생합니다.
var mediaPlayer: MediaPlayer? = MediaPlayer.create(context, R.raw.sound_file)
mediaPlayer?.start()
- 내부 URI : 시스템에서 로컬로 사용 가능한 URI에서 재생합니다. (ex. ContentResolver를 통해 흭득)
val myUri: Uri = ...
val mediaPlayer: MediaPlayer? = MediaPlayer().apply {
setAudioStreamType(AudioManager.STREAM_MUSIC)
setDataSource(context, myUri)
prepare()
start()
}
- 외부 URL : HTTP 스트리밍을 통해 원격 URL에서 재생합니다.
val url = "http://........"
val mediaPlayer: MediaPlayer? = MediaPlayer().apply {
setAudioStreamType(AudioManager.STREAM_MUSIC)
setDataSource(url)
prepare()
start()
}
3. MediaPlayer 종료
MediaPlayer는 시스템 리소스를 낭비할 수 있어서 작업이 끝나면 항상 release()를 호출하여 할당된 시스템 리소스를 해제합니다.
mediaPlayer?.release()
mediaPlayer = null
MediaRecoder
Android에서 제공하는 기본 Recording API에는 Audio Recorder와 Media Recorder가 있습니다.
Audio Recorder의 경우 오디오만 녹음 가능하지만, Media Recorder는 오디오와 비디오 모두 녹음이 가능합니다.
하지만 Media Recorder의 경우 인코딩 된 파일을 받기 때문에 Audio Recorder처럼 PCM Data를 바로 받아올 수 없는 단점이 있습니다.
MediaRecoder 구현하기
1. Manifest에 권한 선언
MediaPlayer를 사용하여 네트워크 기반 콘텐츠를 스트리밍하는 경우에는 애플리케이션에서 네트워크 액세스를 요청해야 합니다. 내부 미디어 파일만 사용한다면 해당 권한은 선언하지 않아도 됩니다.
<!-- 녹음 권한 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
2. MediaRecoder 설정
// 녹음 파일 저장할 위치 지정
fileName = "${externalCacheDir?.absolutePath}/audiorecordtest.3gp"
mediaRecorder: MediaRecorder? = MediaRecoder().apply {
setAudioSource(MediaRecorder.AudioSource.MIC) // 오디오 입력 지정
setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS) // 출력 형식 지정
setAudioEncoder(MediaRecorder.AudioEncoder.AAC) // 압축을 위해 인코딩 지정
setOutputFile(fileName) // 음성 데이터를 저장할 파일 지정
}
3. MediaRecoder 실행 및 종료
mediaRecorder?.apply {
prepare() // 녹음 준비
start() // 녹음 시작
stop() // 녹음 중지
reset() // 녹음 리셋 (객체 재사용 가능)
release() // 자원 해제 및 반환
}
mediaRecorder = null
728x90
반응형
'안드로이드 > 활용' 카테고리의 다른 글
[Android] HttpUrlConnection과 OkHttp (0) | 2023.08.18 |
---|---|
[Android] Socket 통신 (0) | 2023.08.17 |
[Android] ViewPager2 사용하기 (0) | 2023.07.31 |
[Android] ListAdapter로 RecyclerView 효율적으로 사용하기 (0) | 2023.07.27 |
[Android] RecyclerView (0) | 2023.07.26 |