SwiftUI VideoPlayer view plays first frame of video and then stops

485 views Asked by At

I'm trying to play an m3u8 stream in VideoPlayer, but it only plays one frame of the stream before freezing. The built-in play button is unresponsive. I get these messages which might be related:

[api] -[CIImage initWithCVPixelBuffer:options:] failed because the buffer is nil.
Metal API Validation Enabled
[MADService] Client XPC connection invalidated

I thought the problem could be the video player view re-rendering, but I tried isolating the player and no change.

import SwiftUI
import AVFoundation
import AVKit

struct VideoPlayerView: View {
    @State private var player: AVPlayer = AVPlayer()
    @State var url: URL?
    var body: some View {
        return
            VideoPlayer(player: player)
                .onAppear {
                    playVideo()
                }
    }
    
    func playVideo() {
        if let newUrl = url {
            let newPlayerItem = AVPlayerItem(url: newUrl)
            player.replaceCurrentItem(with: newPlayerItem)
        } else {
            player.replaceCurrentItem(with: nil)
        }
    }
}

The function playVideo is correctly called once. Can you walk me through how I can diagnose this problem?

edit I tried playing the URL in VLC on MacOS and it works correctly there.

0

There are 0 answers