ListView
을 통해 추가되는 몇 가지 오디오 파일을 스트리밍하기 위해 android에 MediaPlayer
을 사용하고 있습니다. 항목은 ListView
에서 클릭 할 때 오디오가 재생됩니다.MediaPlayer : 오디오가 처음부터 스트림되지 않습니다.
스트림은 상당히 길며 (35 분 +) 사용자가 스트림이 끝나기 전에 응용 프로그램을 종료 한 경우입니다. 그런 다음 항목이 실행 후 ListView
에서 다시 선택되면 스트림은 중단 된 동일한 위치에서 다시 시작되지만 항목이 ListView
에서 선택 될 때마다 처음부터 시작됩니다.
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
musicService.player.reset();
musicService.player.release();
musicService.player = new MediaPlayer();
try {
musicService.player.setDataSource(skURL[position]);
} catch (IOException e) {
e.printStackTrace();
}
musicService.player.setAudioStreamType(AudioManager.STREAM_MUSIC);
musicService.player.prepareAsync();
musicService.player.setOnPreparedListener(this);
}
@Override
public void onPrepared(MediaPlayer mp) {
musicService.playSK();
}
//In the MusicService.java
public void playSK(){
player.start();
}
나는 그것이
public void playSK(){
player.seekTo(0);
player.start();
}
같은 문제를 해결할하고 부분적으로했던 것을 생각하고 playSK()
방법 0으로 시크 위치를 설정하려 :
여기에 코드입니다. ListView
의 첫 번째 항목을 선택하면 다음 스트림은 항상 처음부터 시작하지만 다른 항목을 클릭하면 다음과 같은 오류를 제공합니다 :
MediaPlayer : error (-2147483648, 0)
MediaPlayer : start called in state 0
MediaPlayer : error (-38, 0)
MediaPlayer : Error (-2147483648, 0)
MediaPlayer : Error (-38, 0)
업데이트 :
그래서 내가 거기 왜 파고하기로 결정 트랙의 시작 부분을 찾으려고 할 때 발생하는 문제로, 미디어 플레이어가 프로토콜 예외로 인해 재생 시간을 가져올 수 없다는 것을 알았습니다.10-01 17:35:06.065 10031-10031/project D/LOG: data source set
10-01 17:35:06.065 10031-10031/project D/LOG: preparing media player
10-01 17:35:06.067 10031-10066/project D/MediaHTTPConnection: filterOutInternalHeaders: key=User-Agent, val= stagefright/1.2 (Linux;Android 6.0.1)
10-01 17:35:06.070 10031-10031/project D/MediaPlayer: setSubtitleAnchor in MediaPlayer
10-01 17:35:06.073 10031-10031/porject D/LOG: media player prepared
10-01 17:35:06.074 10031-10066/project D/MediaHTTPConnection: proxy null port 0
10-01 17:35:06.171 10031-10066/project W/MediaHTTPConnection: readAt 12648448/32768 => java.net.ProtocolException
10-01 17:43:43.352 21618-21618/project D/LOG: seeking to start
10-01 17:43:43.352 21618-21618/project W/MediaPlayer: Stream has no duration and is therefore not seekable.
어떻게이 예외를 처리하고 문제를 해결합니까?
MP 객체의 여러 상태에 집중하십시오. 올바른 트랙이로드되어 있고 플레이어가 올바른 상태 인 경우 IMO에 seek() 호출이있는 NP가 있어야합니다. –
Updated : ProtocolException을 어떻게 처리합니까? – Devansh
ur가 ffmpeg에 익숙하지 않은 경우 YouTube에서 미디어를 업로드 한 다음 YouTube에서 다운로드하여 다운로드 한 버전을 다시 시도하십시오 .. utube remux'd it at Atom이 있기 때문에 괜찮을 수도 있습니다 –