ios 在 Swift 中播放来自服务器的视频文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/25034497/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 01:36:31  来源:igfitidea点击:

Playing a video file from a server in Swift

iosswiftvideompmovieplayercontrollerplayback

提问by Mate Hegedus

I'm trying to play a video from a server using Swift.

我正在尝试使用 Swift 从服务器播放视频。

I have imported MediaPlayerframework, here is my code:

我已经导入了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        
   }
}

I only get a black box when I run in the simulator but no video is playing no matter where I try to load a video from.

当我在模拟器中运行时,我只会得到一个黑匣子,但是无论我尝试从哪里加载视频,都没有播放视频。

UPDATE

更新

Here is the current code

这是当前的代码

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()

This code interestingly plays ~2 seconds of video before going black again!

这段代码有趣地播放了大约 2 秒的视频,然后再次变黑!

回答by Mate Hegedus

UPDATE 2019, Swift 4:

2019 年更新,Swift 4:

MPMovieControlStyle' was deprecated in iOS 9.0: Use AVPlayerViewController in AVKit.

MPMovieControlStyle' 在 iOS 9.0 中被弃用:在 AVKit 中使用 AVPlayerViewController。

So, following the advice, let's change it. Original answer from 2016 is below.

所以,按照建议,让我们改变它。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() }
    }
}

Solved:

解决了:

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

   }
}

回答by shaiju mathew

import AVKit
import AVFoundation

class VideoController: UIViewController

override func viewDidLoad()

    {
       let videoURL = NSURL(string: "VideoUr")
        let player = AVPlayer(url: videoURL! as URL)
        let playerViewController = AVPlayerViewController()
        playerViewController.player = player
        self.present(playerViewController, animated: true) {
            playerViewController.player!.play()
        }


    }

回答by Mr.Javed Multani

Import the libraries:

导入库:

import AVKit
import AVFoundation
import MediaPlayer
import AudioToolbox   

Set delegaete like this

像这样设置代表

AVPlayerViewControllerDelegate

Wrtie pretty code where you want to play like button action:

在你想像按钮动作一样播放的地方写出漂亮的代码:

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

100% working and test

100% 工作和测试

回答by Jace Sparks

I just was having the same issues..

我只是遇到了同样的问题..

MPMoviePlayerController Stops Playing After 5 seconds - Swift

MPMoviePlayerController 在 5 秒后停止播放 - Swift

The issue is your var moviePlayer is going out of scope. By declaring it outside of viewDidLoad like @Victor-Sigler did above, you prevent the black screen issue from happening.

问题是您的 var moviePlayer 超出了范围。通过像上面@Victor-Sigler 所做的那样在 viewDidLoad 之外声明它,可以防止黑屏问题的发生。