如何在ios swift中播放视频

时间:2017-07-28 07:00:41

标签: ios swift avplayer

我是ios编程的新手,实际上我需要流视频网址,但我无法使用avplayer流式传输视频网址,但使用avplayer下载的文件我能够播放。实际问题是我的文件格式不同 例如我的文件名就像这首歌.apa但它是song.mp4

代码:

let avplayerController = AVPlayerViewController()
var avPlayer:AVPlayer?

override func viewDidLoad()
{
    super.viewDidLoad()
    let movieUrl = URL.init(string: "http://techslides.com/demos/sample-videos/small.3gp")
    self.avPlayer = AVPlayer.init(url: movieUrl!)
    self.avplayerController.player = self.avPlayer
}

override func didReceiveMemoryWarning()
{
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func playVideo(_ sender: Any)
{
    self.present(self.avplayerController, animated: true) { 
     self.avplayerController.player?.play()
    }
}

7 个答案:

答案 0 :(得分:4)

在Swift 3中

import Foundation
import AVFoundation
import MediaPlayer
import AVKit


func play()
    {
        let player = AVPlayer(url: "Your Url")
        let playerViewController = AVPlayerViewController()
        playerViewController.player = player
        self.present(playerViewController, animated: true)
        {
            playerViewController.player!.play()
        }


    }

答案 1 :(得分:1)

您无法使用AVPlayer或AVPlayerViewController播放此特定链接(http://techslides.com/demos/sample-videos/small.3gp),因为该文件采用AMR(自适应多速率,一种语音格式) - 自iOS 4.3起不受支持 可以播放一些3gp文件,但只能播放Apple支持的视频和音频流。

答案 2 :(得分:1)

在Swift 3中,尝试使用此代码在项目中播放视频

import UIKit
import AVKit
import AVFoundation
import MediaPlayer
import MobileCoreServices

class VideoPlayerViewController: UIViewController,AVPlayerViewControllerDelegate {

    //MARK: - Outlet -
    @IBOutlet weak var viewVidioPlayer: UIView!
    //MARK: - Variable

    //MARK: - View Life Cycle -
    override func viewDidLoad() {
        super.viewDidLoad()        
    }
    //MARK: - Action -
    //for Playing Video
    @IBAction func btnvideoPlayClicked(_ sender: UIButton) {
         self.videoPlay()
    }

    func videoPlay()
    {
        let playerController = AVPlayerViewController()
        playerController.delegate = self

        let bundle = Bundle.main
        let moviePath: String? = "http://techslides.com/demos/sample-videos/small.3gp"
        let movieURL = URL(fileURLWithPath: moviePath!)

        let player = AVPlayer(url: movieURL)
        playerController.player = player
        self.addChildViewController(playerController)
        self.view.addSubview(playerController.view)
        playerController.view.frame = self.view.frame

        player.play()

    }
    //MARK: - other Function -

    func playerViewControllerWillStartPictureInPicture(_ playerViewController: AVPlayerViewController){
        print("playerViewControllerWillStartPictureInPicture")
    }

    func playerViewControllerDidStartPictureInPicture(_ playerViewController: AVPlayerViewController)
    {
        print("playerViewControllerDidStartPictureInPicture")

    }
    func playerViewController(_ playerViewController: AVPlayerViewController, failedToStartPictureInPictureWithError error: Error)
    {
        print("failedToStartPictureInPictureWithError")
    }
    func playerViewControllerWillStopPictureInPicture(_ playerViewController: AVPlayerViewController)
    {
        print("playerViewControllerWillStopPictureInPicture")
    }
    func playerViewControllerDidStopPictureInPicture(_ playerViewController: AVPlayerViewController)
    {
        print("playerViewControllerDidStopPictureInPicture")
    }
    func playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart(_ playerViewController: AVPlayerViewController) -> Bool
    {
        print("playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart")
        return true
    }
}

我希望它适合你, 谢谢

答案 3 :(得分:0)

这是一个流视频的例子..

override func viewDidLoad() {
        super.viewDidLoad()
        let player = AVPlayer(url: URL(string: "http://techslides.com/demos/sample-videos/small.mp4")!)
        let controller = AVPlayerViewController()
        present(controller, animated: true) { _ in }
        controller.player = player
        addChildViewController(controller)
        view.addSubview(controller.view)
        controller.view.frame = CGRect(x: 50, y: 50, width: 300, height: 300)
        controller.player = player
        controller.showsPlaybackControls = true
        player.isClosedCaptionDisplayEnabled = false
        player.play()
    }

答案 4 :(得分:0)

您可以使用YoutubePlayerView来播放YouTube视频,而对于其他格式,您可以使用UIWebView。为此,只需使用if-else块,

if movieUrl.contains("youtube.com/") {
    var videoId: String = extractYoutubeId(fromLink: movieUrl)
    youtubePlayerView.load(withVideoId: videoId)
} else {  
    webView = UIWebView(frame: CGRect(x: 0, y: 0, width: 288, height: 277))  
    webView.delegate = self
    webView.backgroundColor = UIColor.black  
    webView?.loadRequest(movieUrl)
}

答案 5 :(得分:0)

对于Swift 3播放来自网址的视频

//AVPlayerViewControllerDelegate // example : class TestAudioVideoVC: UIViewController,AVPlayerViewControllerDelegate

func videoPlay()
    {
        let playerController = AVPlayerViewController()
        playerController.delegate = self

        let videoURL = NSURL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")

        let player = AVPlayer(url: videoURL! as URL)
        playerController.player = player
        self.addChildViewController(playerController)
        self.view.addSubview(playerController.view)
        playerController.view.frame = CGRect(x: 0, y: 64, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height - 64)
        playerController.showsPlaybackControls = true
        player.play()
    }

//MARK: - AVPlayerViewController Delegate -

    func playerViewControllerWillStartPictureInPicture(_ playerViewController: AVPlayerViewController){
        print("playerViewControllerWillStartPictureInPicture")
    }

    func playerViewControllerDidStartPictureInPicture(_ playerViewController: AVPlayerViewController)
    {
        print("playerViewControllerDidStartPictureInPicture")

    }
    func playerViewController(_ playerViewController: AVPlayerViewController, failedToStartPictureInPictureWithError error: Error)
    {
        print("failedToStartPictureInPictureWithError")
    }
    func playerViewControllerWillStopPictureInPicture(_ playerViewController: AVPlayerViewController)
    {
        print("playerViewControllerWillStopPictureInPicture")
    }
    func playerViewControllerDidStopPictureInPicture(_ playerViewController: AVPlayerViewController)
    {
        print("playerViewControllerDidStopPictureInPicture")
    }
    func playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart(_ playerViewController: AVPlayerViewController) -> Bool
    {
        print("playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart")
        return true
    }

答案 6 :(得分:0)

快速播放视频5

ViewController类:UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func playVideoUsingURL(_ sender: Any) {
    playGlobalVideo()
}

@IBAction func playVideoFromLocalDrive(_ sender: Any) {
    playLocalVideo()
}

func playGlobalVideo() {
    guard let videoURL = URL(string: "http://static.videokart.ir/clip/100/480.mp4") else {
        return
    }
    let player = AVPlayer(url: videoURL)
    let vc = AVPlayerViewController()
    vc.player = player
    present(vc, animated: true) {
        player.play()
    }
}

func playLocalVideo() {
    guard let videoPath = Bundle.main.path(forResource: "movie", ofType: "mov") else {
        return
    }
    let player = AVPlayer(url: URL.init(fileURLWithPath: videoPath))
    let playCtr = AVPlayerViewController()
    playCtr.player = player
    present(playCtr, animated: true) {
        player.play()
    }
}

}