[iOS] Audio Streaming IT분야/iOS 2012. 2. 17. 11:41
iOS에서 AvAudioPlayer는 기본적으로 MP3 Streaming을 지원하지 않고 Local File만을 지원합니다.
그래서 원격지에 있는 음악파일을 재생시에는 다운 받아서 재생을 해야겠지요..

스트리밍이 지원되는 라이브러리가 없을까 찾아보다가 아래와 같은 사이트 검색...
 https://github.com/mattgallagher/AudioStreamer 

라이브러리와 사용하는 샘플 예제가 같이 들어 있습니다. 어렵지 않게 사용하 실 수 있을 겁니다.
예제 속에는 슬라이더를 이용한 프로그레스 진행상황을 알 수있는 부분과 특정 위치 이동하는 기능등
필요한 부분은 다 구현되어 있습니다.

다만 한가지 스트리밍이 종료될 시점에 현재 재생시간을 알아오는 부분이 문제가 좀 있더군요..
음악은 처음 부터 끝까지 잘 재생되지만 마지막 부분에서 슬라이더가 이동되지 않아 사용자가 보기에
노래가 재생이 덜 된것 처럼 보입니다. 실제로는 다 재생된 겁니다.

해결 방법은 AudioStreamer.m 파일에서 소스를 약간 추가해 주었습니다. 
           if(sampleRate > 0 && ![self isFinishing]){
              ....
  ....
}else if([self isFinishing]){
            AudioTimeStamp queueTime;
Boolean discontinuity;
err = AudioQueueGetCurrentTime(audioQueue, NULL, &queueTime, &discontinuity);
            
const OSStatus AudioQueueStopped = 0x73746F70; // 0x73746F70 is 'stop'
if (err == AudioQueueStopped)
{
return lastProgress;
}
double progress = seekTime + queueTime.mSampleTime / sampleRate;
            lastProgress = progress;
            return progress;
 
별건 없습니다. 종료될 타임에는 현재 오디오 재생시간을 못가져오도록 막혀 있어서 추가해 줬습니다.
원본 소스에서 else if 구문을 추가해 주시면 됩니다. 
더 좋은 방법이 있는지는 모르겠지만...

그럼 즐프.. 
  • 코믹 2012.05.31 20:02 신고

    여기에 댓글 다는 줄 모르고 방명록에 썼네요

    오디오 스트리밍 소스를 가져와서 사용 하는데,
    ARC 켜 있는 상태에선 오류가 나네요.
    메모리 할당해주는 부분 오류를 다 정리 해줬는데도 오류가 나네요

    혹시 아시면 알려주세요.ㅠ

    • suroMind 2012.06.01 13:24 신고

      흠.. 저두 그부분까진 해보질 않았네요..
      지금은 아이폰쪽을 개발을 안해서
      ARC켜고는 만들어보질 않았거든요..
      죄송합니다..흑흑