마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Mediaplayer videofile 재생 시, 소리가 재생되지 않는 문제입니다.

0 추천

안녕하세요.

Android 앱 개발 중, IPTV용 보드에서 앱을 설치하고 구동하는 중 문제가 생겨서 도움을 구하고자 질문 드립니다.

mediaplayer를 사용해서 mp4 비디오 파일을 재생하는 부분에서 영상만 나오고 소리가 출력되지 않는 문제 입니다.

똑같은 소스와 영상파일로 다른 디바이스(각종 태블릿, 폰, 안드로이드 기반 셋탑박스)에서 영상과 함께 소리가 정상적으로

출력됨을 확인하였어요. 그런데 이 안드로이드 보드에서만 영상만 출력되고 소리가 전혀 나오지 않더군요...ㅠㅠ

현재 App의 asset 에서 비디오 파일을 가져와 재생하는 것이 원본 소스인데 위와 같은 문제로 Resource raw에 넣고 

시도해도 마찬가지인 상태이고요. 동영상 파일을 SD Card에 넣고 보드에 삽입하여 경로를 SDcard 경로로 mediaplayer

에 줄 때만 소리가 정상 출력됩니다. 또한 소리파일 (mp3 등) 재생시 소리만은 잘 나옵니다.

 

의심되는 부분은 mediaplayer에 sdcard의 경로로 주면 정상 동작인데 mPlayer.setDataSource(filePath)

AssetFileDescriptor 를 사용하여 asset이나 리소스

에서 영상파일을 읽으면 문제가 발생되는 것으로 보입니다.

여러 가지 방법을 시도해 보았으나 해결의 기미가 보이지 않아 조언을 구합니다.

아래 관련 소스를 첨부합니다.

// 원본소스 asset에서 파일 읽는 방식        
AssetManager am = getResources().getAssets();
mAssetFileDescriptorV = am.openFd("video.mp4");
mPlayer.setDataSource(mAssetFileDescriptorV.getFileDescriptor(), mAssetFileDescriptorV.getStartOffset(), mAssetFileDescriptorV.getLength());
 
// resource raw에서 파일 읽는 방식        
 AssetFileDescriptor afd = this.getResources().openRawResourceFd(R.raw.sample2);
mPlayer.reset();
mPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
 afd.close();
                
mPlayer.setDisplay(holder);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
 mPlayer.prepare();
 mPlayer.setOnPreparedListener(this);
 
 @Override
 public void onPrepared(MediaPlayer arg0) {
 
    mPlayer.start();
 }
프레이83 (130 포인트) 님이 2014년 3월 24일 질문

1개의 답변

+2 추천

mp4 는 컨테이너 형식으로 거기에 들어가는 오디오 코덱이 다양한데,

안드로이드에서 기본적으로 지원하는 것은 제한되어 있습니다. 제조사에서 추가지원하지 않는 이상 MP4컨테이너에서 지원하는 오디오는 AAC, AMR 뿐입니다. 

그래서  MX 플레이어 같은 경우 HW 비디오 디코더 + SW 오디오 디코더를 사용하기도 합니다.

 

결론적으로 단말 특성이라. 지원하시려면 Native 쪽 코드를 수정하던지, MX같은 기능을 넣어주셔야 합니다.

 

사악미소 (65,330 포인트) 님이 2014년 3월 24일 답변
답변 감사합니다.
알려주신 부분으로 더 찾아볼게요^^
...