SwiftUI에서 Videoplayer를 사용해 보았습니다.

3263 단어 VideoPlayerSwiftUI
ios14부터 swiftUI에서 VideoPlayer를 사용할 수 있게 되었기 때문에 사용해 보았습니다. swiftUI의 코드만 표시하고 UIViewControllerRepresentable을 상속한 코드가 필요한 부분을 설명했습니다.

SwiftUI의 코드에서만 표현


import SwiftUI
import AVKit

struct ContentView: View {
    // play river.mp4
    private let player = AVPlayer(url: Bundle.main.url(forResource: "river", withExtension: "mp4")!)

    var body: some View {
        HStack{
            VideoPlayer(player: player)
            .onAppear() {
                self.player.play()
       }.onDisappear() {
                self.player.pause()
            }.edgesIgnoringSafeArea(.all)
        }
    }
}

화면 표시


  • mp4 파일로 동영상을 재생했습니다.
  • 깨달음으로서 이하 2점이 있습니다. ( 코드에서 사용하는 동영상 인용 소스 )
  • 아래 그림과 같이 동영상의 검은 프레임 (파란 부분)이 남습니다.
  • 아래 그림과 같이 동영상의 재생이나 정지 등을 제어하는 ​​UI 부품이 표시된다



  • 예를 들어, 로그인 화면의 배경으로 전체 화면에서 동영상을 표시하고 싶은 경우에 전체 화면에서 동영상 재생, 정지의 UI 부품을 지울 것을 고려할까 생각합니다. 2021년 4월 시점에서는, SwiftUi만의 코드에서는 지워지지 않고, UIViewControllerRepresentable를 이용해 AVPlayer,AVPlayerViewController를 이용해, 그 부품을 지울 필요가 있을 것 같습니다.

    AVPlayer, AVPlayerViewController를 이용, UIViewControllerRepresentable을 상속한 코드가 필요한 곳



    코드는 다음과 같습니다.
    
    import SwiftUI
    import AVKit
    
    struct ContentView: View {
        //play river movie
        private let player =
            AVPlayer(url: Bundle.main.url(forResource: "river", withExtension: "mp4")!)
        var body: some View {
            PlayerViewController(player: player)
                .onAppear(){
                    self.player.play()
                }.edgesIgnoringSafeArea(.all)
        }
    }
    
    struct PlayerViewController: UIViewControllerRepresentable {
    
        func makeUIViewController(context: Context) -> AVPlayerViewController {
            let player =
                AVPlayer(url: Bundle.main.url(forResource: "kawa", withExtension: "mp4")!)
            let controller =  AVPlayerViewController()
            controller.modalPresentationStyle = .fullScreen
            controller.player = player
            controller.videoGravity = .resizeAspectFill
            controller.showsPlaybackControls = false
            return controller
        }
    
        func updateUIViewController(_ playerController: AVPlayerViewController, context: Context) {
            //none
        }
    }
    

    화면 표시



    안전 영역을 포함하여 동영상을 볼 수 있습니다. 아래는 그 스크린 샷입니다.
    ( 코드에서 사용하는 동영상 인용 소스 )


    미래의 기대



    앞으로의 SwiftUI의 버전 업으로, SwiftUI의 코드만으로 기재할 수 있는 부품이 많아질 것을 기대하고 있습니다.

    좋은 웹페이지 즐겨찾기