Przesyłam strumieniowo dźwięk za pomocą AVPlayer. Działa dobrze. Ale teraz muszę zrobić suwak, aby przesuwać dźwięk do przodu i do tyłu, jak typowy odtwarzacz muzyki. Użyłem funkcji seekToTime
, która działa doskonale z lokalnym plikiem audio. Ale kiedy strumieniowo odtwarzam utwór z adresu internetowego, funkcja zatrzymuje dźwięk, gdy przesuwam suwak z dużym zakresem.SeekToTime w AVPlayer przestaje odtwarzać dźwięk przesyłany strumieniowo, gdy przesyłam dźwięk w przód
Domyślam się, że utwór jest pobierany i jeśli przesuniemy suwak w przód o duży zakres, może to oznaczać, że system nie pobrał pakietów danych utworu dla tego czasu, więc zatrzymuje odtwarzacz.
Powiedzmy, że po prostu wciskam przycisk, aby odtwarzać utwór, ale teraz przesuwaj suwak natychmiast na 0 do 100 sekundy. W tym przypadku system nie działa i zatrzymuje odtwarzacz. Z powodu braku pakietów danych na ten czas.
Czy ktoś wie, jak rozwiązać ten problem lub czy istnieje inne podejście. Używam SWIFT do programowania. Mam też do dyspozycji dowolną bibliotekę, jeśli będzie działać szybko. To jest moja funkcja:
func forward() {
timeGap = slider.value
let preferredTimeScale : Int32 = 1
let targetTime : CMTime = CMTimeMake(timeGap, preferredTimeScale)
player.seekToTime(targetTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)
}
Z góry dziękuję.
Zauważyłem, że kiedy zacznę na żywo wideo strumieniowo bufor jest pusty od samego początku ('playbackBufferEmpty == true'), a flaga playbackBufferEmpty nigdy nie zmienia stanu na false. Czy istnieje sposób ręcznego rozpoczęcia buforowania za pomocą AVFoundation? – svrs