我想用Swift从服务器上播放一段视频.

我已经导入了MediaPlayer个框架,下面是我的代码:

import UIKit
import MediaPlayer

class VideoViewController: UIViewController {

   override func viewDidLoad() {
        super.viewDidLoad()

        var url:NSURL = NSURL(string: "http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v")        
        var moviePlayer = MPMoviePlayerController(contentURL: url)

        moviePlayer.view.frame = CGRect(x: 20, y: 100, width: 200, height: 150)        
        self.view.addSubview(moviePlayer.view)

        moviePlayer.fullscreen = true        
        moviePlayer.controlStyle = MPMovieControlStyle.Embedded        
   }
}

我只有在模拟器中运行时才会看到一个黑匣子,但无论我从哪里加载视频,都不会播放视频.

使现代化

以下是当前代码

var url:NSURL = NSURL(string: "http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v")

var moviePlayer = MPMoviePlayerController(contentURL: url)

moviePlayer.view.frame = CGRect(x: 20, y: 100, width: 200, height: 150)        
moviePlayer.movieSourceType = MPMovieSourceType.File

self.view.addSubview(moviePlayer.view)        
moviePlayer.prepareToPlay()
moviePlayer.play()

有趣的是,这段代码在再次变黑之前播放约2秒的视频!

推荐答案

UPDATE 2019, Swift 4:

在iOS 9.0中不推荐使用"MPMovieControlStyle":在AVKit中使用AVPlayServiceWController.

所以,按照建议,让我们改变它.2016年的原始答案如下.

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        let url = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")!
        
        playVideo(url: url)
    }
    
    func playVideo(url: URL) {
        let player = AVPlayer(url: url)
        
        let vc = AVPlayerViewController()
        vc.player = player
        
        self.present(vc, animated: true) { vc.player?.play() }
    }
}

最初的答案是:

import UIKit
import MediaPlayer

class VideoViewController: UIViewController {

   var moviePlayer:MPMoviePlayerController!

   override func viewDidLoad() {
      super.viewDidLoad()

      let url:NSURL = NSURL(string: "http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v")

      moviePlayer = MPMoviePlayerController(contentURL: url)
      moviePlayer.view.frame = CGRect(x: 20, y: 100, width: 200, height: 150)

      self.view.addSubview(moviePlayer.view)
      moviePlayer.fullscreen = true

      moviePlayer.controlStyle = MPMovieControlStyle.Embedded

   }
}

Swift相关问答推荐

在`NavigationStack`中使用`SafeAreaInset`修饰符时出现SwiftUI异常行为

SwiftData:非法try 在不同上下文中的对象之间建立关系

按数组大小进行类型判断?

字符串和整数格式的for循环,帮忙!

如何在SwiftUI中更改NSTextView中的 Select colored颜色 ?

在 Swift 5.7 中使用协议作为类型时什么时候需要写 `any`

如何使一个 Reality Composer 场景中的分组对象可拖动?

如何从 RC 加载场景作为 ModelEntity 而不是普通实体?

将 ArgumentParser 与 Swift 并发一起使用

在 RealmSwift 中表示范围值?

从 iPhone 中的安全飞地获取真正的随机数?

持久化字符串列表属性 RealmSwift

如何有条件地依赖桌面与 iOS 的系统库?

任何使 ScrollView 像 List 一样执行更灵活的修饰符?

为什么swiftui中的导航视图栏那么大?

将项目引用添加到 Swift iOS XCode 项目并调试

从 NSData 对象在 Swift 中创建一个数组

是 swift 中另一个日期的同一周、月、年的日期

DispatchQueue:不能在非主线程上使用 asCopy = NO 调用

如何在 Swift 中将 NSURL 转换为字符串