

swiftuiでmacos用のvideoplayerを作っています。  
"https~"から始まるurlにはアクセスできますが、ローカルパスをfile:///~のurlで打ち込んでも動画が再生できません。  
NSOpenPanelを使った場合はローカルパスにアクセスできますが、直接打ち込んで再生できるようにしたいです。

[code]

    import AVKit
    import SwiftUI
    
    struct ContentView: View {
        @State var player = AVPlayer()
        var videoUrl: String = "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4"
    
    //    var videoUrl = URL(fileURLWithPath: "/Users~.mp4")
        
        var body: some View {
            VideoPlayer(player: player)
                .onAppear(){
                    player = AVPlayer(url: URL(string: videoUrl)!)
                }
        }
    }
    
[/code]

@zunda

回答ありがとうございます。  
NSOpenPanelを使って選択したファイルのボタンリストを作り、選択してみました。  
imageの方は任意のファイルを表示できますがビデオはやはり読み込めません。

[code]

       @State private var ContentsList : [String] = []
       @State var ContentName = "content"
       @State var player = AVPlayer()
       
       var body: some View {
           VStack {
               if ContentsList.isEmpty == false{
                   HStack{
                       AsyncImage(url: URL(string: ContentName)){ image in
                           image.resizable()
                       }placeholder: {
                           ProgressView()
                       }
                       VideoPlayer(player: player)
                           .onAppear() {
                               player = AVPlayer(url: URL(string: ContentName)!)
                           }
                   }
               }
               
               HStack{
                   Button("select item"){
                       let panel = NSOpenPanel()
                       panel.canChooseDirectories = true
                       panel.canChooseFiles = true
                       panel.allowsMultipleSelection = true
                       panel.allowedFileTypes = ["jpg","jpeg","png","mp4","mov"]
                       panel.message = "open files"
                       if panel.runModal() == .OK{
                           for url in panel.urls{
                               ContentsList.append(url.absoluteString)
                           }
                       }
                   }
                   List(ContentsList, id: \.self){ item in
                       let path = NSString(string: String(item))
                       Button(path.lastPathComponent){
                           ContentName = String(item)
                       }
                   }
                   .frame(width: 400,height: 300)
                   Text(ContentName)
               }
           }
           
       }
    }  
    
[/code]


CC BY-SA 4.0
2023-04-04T07:50:24.623
94414
2023-04-06T06:23:15.060
2023-04-06T06:23:15.060
22647
22647
question
xcode macos swiftui
swiftuiのvideoplayerでmacのデスクトップなどのローカルパスのビデオファイルを再生する方法を知りたい


`file://`を先頭につけることでうまくいかないですか？

[code]

    struct ContentView: View {
      let filePath = URL(fileURLWithPath: "file:///Users/okd/Desktop/okdtest.mp4")
    
      var body: some View {
          let player = AVPlayer(url: filePath)
          VideoPlayer(player: player)
      }
    }
    
[/code]


CC BY-SA 4.0
2023-04-05T05:53:41.053
94422
2023-04-05T05:53:41.053
40856
94414
answer