2017-03-06 9 views
0

나는 인터넷에서 스트리밍 mp3 파일을 위해 AVPlayer를 사용하며 정말 느립니다. 프로파일 러를 사용하여 처음에는 전체 파일을 다운로드 한 다음 재생을 시작했습니다. 이 문제를 해결할 수있는 방법이 있습니까? 지금 스트리밍을 위해 AVPlayer를 사용하는 것이 느립니다.

, 나는이 코드 내가 해봤 것들

if let player = player { 
    NotificationCenter.default.removeObserver(self, name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem) 

    let item = AVPlayerItem(url: url) 

    player.replaceCurrentItem(with: item) 
} else { 
    player = AVPlayer(url: url) 
} 
player?.play() 

사용하고 있습니다 :

  • 이동 플레이어를 .play()를 관찰자로, 상태 재산에 부착 항목
  • 속성 주위에 놀래기 preferForwardBufferDurationpreferPeakBitRate

항상 오디오 파일 전체를 다운로드하고 재생을 시작합니다.

플레이어가 전체 파일을 다운로드 한 후에 만 ​​재생을 시작하고 mp3를 스트리밍하려는 경우 문제가 있음을 유의하십시오.

당신은 AVPlayer를 빈 버퍼 얻을 때 관찰자를 추가 할 수 있습니다
+0

이 링크를 확인하실 수 있습니다. http://stackoverflow.com/questions/22813557/playing-stream-with-bad-internet-in-avplayer –

+1

사용해보기 : player.automaticallyWaitsToMinimizeStalling = false – Suen

+0

@Suen, 예! 이제는 전체로드 전에 재생됩니다. 귀하의 의견을 답변으로 변경하여 다른 사람들에게 더 잘 보이게 할 수 있습니까? –

답변

3

player.automaticallyWaitsToMinimizeSta를 설정할 수 있습니다. lling = false 즉시 재생합니다.

0

:

[[self.tracksPlayer currentItem] addObserver:self 
           forKeyPath:@"playbackBufferEmpty" 
           options:NSKeyValueObservingOptionNew 
           context:nil]; 

그리고 AVPlayer를 최대로 유지하기에 충분한 버퍼 때 관찰자가 당신이 알 수 있도록 : 단지 확인

[[self.tracksPlayer currentItem] addObserver:self 
           forKeyPath:@"playbackLikelyToKeepUp" 
           options:NSKeyValueObservingOptionNew 
           context:nil]; 

을 다음 KVO 콜백의 경우 :

- (void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)object 
        change:(NSDictionary *)change 
        context:(void *)context { 

if (object == [self.tracksPlayer currentItem] && 
    [keyPath isEqualToString:@"playbackBufferEmpty"]) { 

    if ([self.tracksPlayer currentItem].playbackBufferEmpty) { 

     NSLog(@"Buffer Empty"); 
    } 
} else if (object == [self.tracksPlayer currentItem] && 
     [keyPath isEqualToString:@"playbackLikelyToKeepUp"]) { 


    if ([self.tracksPlayer currentItem].playbackLikelyToKeepUp) { 

     NSLog(@"LikelyToKeepUp"); 
    } 
    } 
} 
+0

확실하지 않습니다. 어떻게 이해할 수 있습니까? –

+0

Apple 문서에 따르면 playbackBufferFull이 YES 인 경우에도 playbackLikelyToKeepUp이 NO가 될 수 있습니다. 알다시피, playbackLikelyToKeepUp은 인터넷 연결 속도를 기반으로하며 버퍼의 데이터 양은 아닙니다. –

+0

아직도, 나는 그것이 어떻게 나를 도울 수 있는지 알지 못한다. 비록 내가 알더라도, 그것은 무언가 때문에, 아직 그것을 할 수 없다는 것입니다 - 어떻게하면 연주를 시작할 수 있습니까? –