62869
Documentsフォルダにダウンロードした動画ファイル (*.mov, *.mp4) を再生したいと思い、  
以下のコードを書きました。

しかし、同じ動画ファイルでも、①の方法では再生され、②の方法では再生されません。  
moviePathの値を確認したのですが、特に問題なく、Documentsフォルダに該当の動画ファイルがありました。

  1. `Bundle.main.path` で指定した場合:  
動画は再生される

  2. `moviePath = localMovieFilePath! + localMovieFileName!` で指定した場合:  
動画が再生されない

info.plist の App Transport Security Settings -> Allow Arbitrary Loads は YES
にしております。

どなたかわかる方、ご教授願えませんでしたでしょうか。

* * *
```

    /// 動画を再生する
    func playAnimetion() {
    
        let localMovieFilePath: String? = UserDefaults.standard.string(forKey: Constants.localMovieFilePath)
        let localMovieFileName: String? = UserDefaults.standard.string(forKey: Constants.localMovieFileName)
        let moviePath: String
        if (localMovieFilePath == nil || localMovieFileName == nil) {
            moviePath = Bundle.main.path(forResource: "AdobeStock_218702675", ofType: "mov")!
        } else {
            moviePath = localMovieFilePath! + localMovieFileName!
        }
        print("moviePath = " + moviePath)
        player = AVPlayer(url: URL(fileURLWithPath: moviePath))
        player.play()
        let playerLayer = AVPlayerLayer(player: player)
        playerLayer.frame = self.view.bounds
        playerLayer.videoGravity = .resizeAspectFill
        videoView.layer.insertSublayer(playerLayer, at: 0)
    }
    
```
CC BY-SA 4.0
2020-02-07T08:55:18.167
62852
2020-02-09T16:49:12.957
2020-02-07T16:37:08.043
3060
23788
question
ios swift5
Documentsフォルダにある動画ファイルが再生出来ない
自己解決いたしました。

```

    localMovieFilePath = "/var/foo/hoge/"
    localMovieFileName = "sample.mp4"
    
    moviePath = localMovieFilePath! + localMovieFileName!
    print("moviePath = " + moviePath)
    
```

で、moviePathの値を見てみると、

```

    moviePath = file:///var/foo/hoge/sample.mp4
    
```

となっていたので、`file://` を削除して

```

    moviePath = /var/foo/hoge/sample.mp4
    
```

としてみたところ、動画ファイルが正常に再生されました。

どういう条件で `file:///` が付与されるのかは  
分かりませんが、取り敢えず問題は回避出来ました。
CC BY-SA 4.0
2020-02-08T05:43:59.300
62869
2020-02-09T16:49:12.957
2020-02-09T16:49:12.957
3060
23788
62852
answer