কীভাবে সুইফটে AVPlayerViewController (AVKit) এর সাথে ভিডিও প্লে করবেন


164

আপনি কীভাবে এভি কিট প্লেয়ার সুইফটে ভিউ কন্ট্রোলারের সাথে একটি ভিডিও খেলেন?

override func viewDidLoad() {
        super.viewDidLoad()
        let videoURLWithPath = "http://****/5.m3u8"
        let videoURL = NSURL(string: videoURLWithPath)
        playerViewController = AVPlayerViewController()

        dispatch_async(dispatch_get_main_queue()) {
            self.playerViewController?.player = AVPlayer.playerWithURL(videoURL) as AVPlayer
        }
    }

ব্যবহারের জন্য AVPlayer(নিয়ন্ত্রণগুলি নেই), এই উত্তরটি দেখুন
সুরগাচ

উত্তর:


532

সুইফট 3.x - 5.x

প্রয়োজনীয়: AVKit আমদানি করুন , AVFoundation আমদানি করুন

আপনি AVPlayer ব্যবহার করলেও AVFoundation ফ্রেমওয়ার্ক প্রয়োজন

আপনি যদি AVPlayerViewController ব্যবহার করতে চান :

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

বা কেবল এভিপ্লেয়ার :

let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let player = AVPlayer(url: videoURL!)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.bounds
self.view.layer.addSublayer(playerLayer)
player.play()

পদ্ধতিতে এই কোডটি রাখা ভাল: ওভাররাইড ফানক ভিউডিডঅ্যাপার (_ অ্যানিমেটেড: পুল) বা কোথাও পরে।


উদ্দেশ্য গ

এভিপ্লেয়ারভিউ নিয়ন্ত্রণকারী :

NSURL *videoURL = [NSURL URLWithString:@"https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"];
AVPlayer *player = [AVPlayer playerWithURL:videoURL];
AVPlayerViewController *playerViewController = [AVPlayerViewController new];
playerViewController.player = player;
[self presentViewController:playerViewController animated:YES completion:^{
  [playerViewController.player play];
}];

বা কেবল এভিপ্লেয়ার :

NSURL *videoURL = [NSURL URLWithString:@"https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"];
AVPlayer *player = [AVPlayer playerWithURL:videoURL];
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.frame = self.view.bounds;
[self.view.layer addSublayer:playerLayer];
[player play];

@ পিকিস কোড উদাহরণের জন্য ধন্যবাদ। আশ্চর্যের বিষয়, আমরা এভিপ্লেয়ারকন্ট্রোলারকে লিখিত হিসাবে চেষ্টা করেছি এবং এতে একটি সিবিএবিআরটি পাই: [স্বতঃ উপস্থিত ভিউকন্ট্রোলার: প্লেয়ারভিউকন্ট্রোলার অ্যানিমেটেড: হ্যাঁ সমাপ্তি: শূন্য];
প্রক্সাইটেলস

@ প্রক্সিটেলস, এটি আইওএস 8 বা তার পরে কাজ করে, সম্ভবত এটিই কারণ।
pkis

8
এছাড়াও আমার জন্য এভিফাউন্ডেশন আমদানি করা প্রয়োজন
রিচ ফক্স

1
@ নিক ,৯, এভিপ্লেয়ার সরাসরি লিঙ্কগুলির সাথে সঠিকভাবে কাজ করে তবে আপনার যদি ইউটিউব, ভিমিও ইত্যাদির মতো পরিষেবাগুলি (যা অপ্রত্যক্ষ লিঙ্কগুলি ব্যবহার করে) ব্যবহার করতে হয় তবে আপনার নিজের লাইব্রেরি বা এসডিকে ব্যবহার করা উচিত। (যেমন ইউটিউবের জন্য: গাইড )।
pkis

2
নির্দেশাবলীর ক্রমটি গুরুত্বপূর্ণ, এছাড়াও আমার AVKit আমদানি করা দরকার
htafoya

30

এটি চেষ্টা করুন, অবশ্যই কাজ করে Swift 2.0

 let player = AVPlayer(URL: url)
    let playerController = AVPlayerViewController()

    playerController.player = player
    self.addChildViewController(playerController)
    self.view.addSubview(playerController.view)
    playerController.view.frame = self.view.frame

    player.play()  

1
ধন্যবাদ। অ্যাডচিল্ডভিউ কনট্রোলার এটিকে আমার যা চাইবে তা এম্বেড করে। :)
এসডিডাব্লু

1
এম্বেডিং ত্রুটিহীনভাবে কাজ করে তবে আপনি কীভাবে ওরিয়েন্টেশন পরিবর্তনগুলি পরিচালনা করবেন? ধরা যাক প্লেয়ার প্রতিকৃতিতে পর্দার অর্ধেক অংশ নেবেন এবং দেখুন নিয়ামক কেবল প্রতিকৃতি সমর্থন করে তবে বেশিরভাগ অ্যাপ্লিকেশন যেমন ই .. ইউটিউব, ভিমেও ইত্যাদির মতো ভিডিও প্রতিকৃতিতে ভিডিও দেখা যায়
আবিদ হুসেন

দ্রষ্টব্য: অ্যাডচিল্ডভিউ নিয়ন্ত্রণকারী প্রয়োজনীয়। আমি এটি ছাড়াই চেষ্টা করেছি এবং তারপরে এটি প্রায় কাজ করে - এটি একবার প্লে হয়, এটি পুরো স্ক্রিনে প্রসারিত হয়। তবে এটি আবার খেলবে না বা পুরো স্ক্রিন মোড থেকে বেরিয়ে আসবে না। সুতরাং চাইল্ড ভিউ কন্ট্রোলার প্রয়োজনীয়।
n13

self.addChildViewController(playerController)এখন self.addChild(playerController)FYI
Marquis103

12

এটা চেষ্টা কর

var player:AVPlayer!
var avPlayerLayer:AVPlayerLayer = AVPlayerLayer(player: player)
avPlayerLayer.frame = CGRectMake(your frame)
self.view.layer .addSublayer(avPlayerLayer)
var steamingURL:NSURL = NSURL(string:playerURL)
player = AVPlayer(URL: steamingURL)
player.play()

আমি এই কোডটি চালানোর সময় খালি ভিউ নিয়ন্ত্রকটি
পাই

@ ওনারসন আপনি এভিপ্লায়ারলায়ার ফ্রেম সেট করেছেন?
রমেশ

1
@ অ্যানপারসন ঠিক আছে এই avPlayerLayer.frame = সিজিআরেক্টমেক (50,50,100,100) সেট করুন
রমেশ

কোড ভার প্লেয়ার: এভিপ্লেয়ার! var প্লেয়ার আইটেম: এভিপ্লেয়ারআইটেম !; var avPlayerLayer: AVPlayerLayer = AVPlayerLayer (প্লেয়ার: প্লেয়ার) #PlayerLayer.frame = CGRectMake (50,50,100,100) self.view.layer .addSublayer (#PlayerLayer) ভিডিও URLWithPath = "http: //*****/45.mm স্টিমিং ইউআরএল: এনএসআরএল = এনএসআরএল (স্ট্রিং: ভিডিও ইউআরএলওথপথ) প্লেয়ার = এভিপ্লেয়ার (ইউআরএল: স্টিমিং URL) প্লেয়ার.প্লে () কোড
ওরাজ

অ্যানপারসন প্রান্তে.টলকুন.টিভি / .৫.m3u8 কাজ করছে না। আপনি কি আপনার সম্পূর্ণ url দিতে পারবেন
রমেশ

11

সুইফট 3.0 সম্পূর্ণ উত্স কোড:

import UIKit
    import AVKit
    import AVFoundation

    class ViewController: UIViewController,AVPlayerViewControllerDelegate
    {
        var playerController = AVPlayerViewController()


        @IBAction func Play(_ sender: Any)
        {
            let path = Bundle.main.path(forResource: "video", ofType: "mp4")

            let url = NSURL(fileURLWithPath: path!)

            let player = AVPlayer(url:url as URL)

            playerController = AVPlayerViewController()


            NotificationCenter.default.addObserver(self, selector: #selector(ViewController.didfinishplaying(note:)),name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem)

            playerController.player = player

            playerController.allowsPictureInPicturePlayback = true

            playerController.delegate = self

            playerController.player?.play()

            self.present(playerController,animated:true,completion:nil)
        }

        func didfinishplaying(note : NSNotification)
        {
            playerController.dismiss(animated: true,completion: nil)
            let alertview = UIAlertController(title:"finished",message:"video finished",preferredStyle: .alert)
            alertview.addAction(UIAlertAction(title:"Ok",style: .default, handler: nil))
            self.present(alertview,animated:true,completion: nil)
        }


        func playerViewController(_ playerViewController: AVPlayerViewController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: @escaping (Bool) -> Void) {
                let currentviewController =  navigationController?.visibleViewController

                if currentviewController != playerViewController
                {
                    currentviewController?.present(playerViewController,animated: true,completion:nil)
                }


            }
    }

হ্যালো রোনাক, ভিডিওটির শেষটি পরিচালনা করতে দ্রুত পর্যবেক্ষকদের পরিচয় করানোর জন্য আপনাকে ধন্যবাদ! আমি আপনার শীর্ষে উত্তর (প্রথম কোড স্নিপেট) দিয়ে দেওয়া কোড দিয়ে AVPlayerViewController তৈরি করে এটি কাজ করতে পরিচালিত হইনি, কী আলাদা? আপনার পদ্ধতিগুলিতে পর্যবেক্ষককে কাজ করার জন্য আমি যা মিস করেছি বা তা প্রয়োগ করতে হবে?
মানু

6

উদ্দেশ্য গ

এটি শুধুমাত্র কাজ করে Xcode 7

.hফাইল এবং আমদানি যান AVKit/AVKit.hএবং AVFoundation/AVFoundation.h। তারপরে .mফাইলটিতে যান এবং এই কোডটি যুক্ত করুন:

NSURL *url=[[NSBundle mainBundle]URLForResource:@"arreg" withExtension:@"mp4"];
AVPlayer *video=[AVPlayer playerWithURL:url];
AVPlayerViewController *controller=[[AVPlayerViewController alloc]init];
controller.player=video;
[self.view addSubview:controller.view];
controller.view.frame=self.view.frame;
[self addChildViewController:controller];
[video play];

4

MPMoviePlayerController ব্যবহার করে:

 import UIKit
 import MediaPlayer

 class ViewController: UIViewController {

     var streamPlayer : MPMoviePlayerController =  MPMoviePlayerController(contentURL: NSURL(string:"video url here"))
     override func viewDidLoad() {
         super.viewDidLoad()
         streamPlayer.view.frame = self.view.bounds
         self.view.addSubview(streamPlayer.view)

         streamPlayer.fullscreen = true
         // Play the movie!
         streamPlayer.play()
}
}

AVPlayer ব্যবহার:

import AVFoundation

var playerItem:AVPlayerItem?
var player:AVPlayer?

override func viewDidLoad() {
        super.viewDidLoad() 
      let url = NSURL(string: "url of the audio or video") 
      playerItem = AVPlayerItem(URL: url!)
      player=AVPlayer(playerItem: playerItem!)
      let playerLayer=AVPlayerLayer(player: player!)
      playerLayer.frame=CGRectMake(0, 0, 300, 50)
      self.view.layer.addSublayer(playerLayer)
}

বোতামের ট্যাপটি হ্যান্ডেল করার জন্য আমার কাছে একটি প্লে বাটন আছে।

playButton.addTarget(self, action: "playButtonTapped:", forControlEvents: .TouchUpInside)

func playButtonTapped(sender: AnyObject) {
        if player?.rate == 0
        {
            player!.play()
            playButton.setImage(UIImage(named: "player_control_pause_50px.png"), forState: UIControlState.Normal)
        } else {
            player!.pause()
            playButton.setImage(UIImage(named: "player_control_play_50px.png"), forState: UIControlState.Normal)
        }
    }

আমি AVPlayerItemDidPlayToEndTimeNotifications শোনার জন্য একটি পর্যবেক্ষক যুক্ত করেছি।

override func viewWillAppear(animated: Bool) {
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "finishedPlaying:", name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem)
    }

override func viewWillDisappear(animated: Bool) {
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }

ভিডিও / অডিও প্লে শেষ হয়ে গেলে, বোতামের চিত্র এবং বিজ্ঞপ্তি পুনরায় সেট করুন

  func finishedPlaying(myNotification:NSNotification) {
        playButton.setImage(UIImage(named: "player_control_play_50px.png"), forState: UIControlState.Normal)

        let stopedPlayerItem: AVPlayerItem = myNotification.object as! AVPlayerItem
        stopedPlayerItem.seekToTime(kCMTimeZero)
    }

2
MPMoviePlayerController হ্রাস করা হয়েছে এবং আমাদের সম্ভবত এটি আর ব্যবহার করা উচিত নয়।
স্কাইওয়াকার

আপনি দয়া করে কোনও স্থানীয় ভিডিও ব্যবহার করে পরীক্ষার জন্য URL গুলি ব্যবহার না করার উদাহরণ দিতে পারেন give
nyxee

4

আইওএস 10 / সুইফট 3 / এক্সকোড 8 এ একটি বাগ (?!)?

if let url = URL(string: "http://devstreaming.apple.com/videos/wwdc/2016/102w0bsn0ge83qfv7za/102/hls_vod_mvp.m3u8"){
    let playerItem = AVPlayerItem(url: url)
    let player = AVPlayer(playerItem: playerItem)
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame=CGRect(x: 10, y: 10, width: 300, height: 300)
    self.view.layer.addSublayer(playerLayer)
}

কাজ করে না (খালি rect ...)

এইটা কাজ করে:

if let url = URL(string: "http://devstreaming.apple.com/videos/wwdc/2016/102w0bsn0ge83qfv7za/102/hls_vod_mvp.m3u8"){

            let player = AVPlayer(url: url)
            let controller=AVPlayerViewController()
            controller.player=player
            controller.view.frame = self.view.frame
            self.view.addSubview(controller.view)
            self.addChildViewController(controller)
            player.play()
        }

একই ইউআরএল ...


এই লাইনটি যুক্ত করুন: player.play()পরে: self.view.layer.addSublayer(playerLayer)এবং আবার চেষ্টা করুন
ওরাজ

4

সুইফট 3:

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {

    @IBOutlet weak var viewPlay: UIView!
    var player : AVPlayer?

    override func viewDidLoad() {
        super.viewDidLoad()

        let url : URL = URL(string: "http://static.videokart.ir/clip/100/480.mp4")!
        player = AVPlayer(url: url)
        let playerLayer = AVPlayerLayer(player: player)
        playerLayer.frame = self.viewPlay.bounds
        self.viewPlay.layer.addSublayer(playerLayer)

    }

    @IBAction func play(_ sender: Any) {
        player?.play()
    }

    @IBAction func stop(_ sender: Any) {
        player?.pause()
    }

}

আপনার উত্তরে আপনি কোথায় ব্যবহার করেছেন AVPlayerViewController?
আনবিস

1

এটি সুইফট 5-এ আমার জন্য কাজ করেছিল

স্যাম্পল ভিডিওগুলি থেকে প্রকল্পের জন্য সবেমাত্র নমুনা ভিডিও যুক্ত করা হয়েছে

নিম্নলিখিত সুইফট কোড উদাহরণ সহ ওয়েবসাইট এবং স্থানীয় থেকে ভিডিও প্লে করার জন্য অ্যাকশন বোতাম যুক্ত করা হয়েছে

import UIKit
import AVKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //TODO : Make Sure Add and copy "SampleVideo.mp4" file in project before play
    }

    @IBAction func playWebVideo(_ sender: Any) {

        guard let url = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") else {
            return
        }
        // Create an AVPlayer, passing it the HTTP Live Streaming URL.
        let player = AVPlayer(url: url)
        let controller = AVPlayerViewController()
        controller.player = player
        present(controller, animated: true) {
            player.play()
        }
    }

    @IBAction func playLocalVideo(_ sender: Any) {

        guard let path = Bundle.main.path(forResource: "SampleVideo", ofType: "mp4") else {
            return
        }
        let videoURL = NSURL(fileURLWithPath: path)

        // Create an AVPlayer, passing it the local video url path
        let player = AVPlayer(url: videoURL as URL)
        let controller = AVPlayerViewController()
        controller.player = player
        present(controller, animated: true) {
            player.play()
        }
    }

}

0

সুইফট 5

  @IBAction func buttonPressed(_ sender: Any) {
    let videoURL = course.introductionVideoURL
    let player = AVPlayer(url: videoURL)
    let playerViewController = AVPlayerViewController()
    playerViewController.player = player

    present(playerViewController, animated: true, completion: {

        playerViewController.player!.play()
    })

// এখানে কোর্সে একটি মডেল ফাইল রয়েছে, এর ভিতরে আমি url দিয়েছি, তাই আমি কোর্স ফাংশনটি ব্যবহার করে মডেল থেকে ফাংশনটি কল করছি।

// এছাড়াও ভূমিকাVideoUll একটি ইউআরএল যা আমি ভিতরে মডেল হিসাবে ঘোষণা করেছি।

 var introductionVideoURL: URL

এছাড়াও বিকল্পভাবে আপনি মডেল থেকে ফাংশন কল করার পরিবর্তে নীচের কোডটি ব্যবহার করতে পারেন

এই কোডটি প্রতিস্থাপন করুন

  let videoURL = course.introductionVideoURL

সঙ্গে

  guard let videoURL = URL(string: "https://something.mp4) else {
        return

0
let videoUrl = //URL: Your Video URL

//Create player first using your URL
let yourplayer = AVPlayer(url: videoUrl)

//Create player controller and set it’s player
let playerController = AVPlayerViewController()
playerController.player = yourplayer


//Final step To present controller  with player in your view controller
present(playerController, animated: true, completion: {
   playerController.player!.play()
})

0

সুইফ্ট 5.0

@ আইকনক্টি উত্তর থেকে উন্নত। এটি আমার পক্ষে কাজ করেছে।

 if let url = URL(string: "urUrlString"){
            let player = AVPlayer(url: url)
            let avController = AVPlayerViewController()
            avController.player = player
            // your desired frame
            avController.view.frame = self.view.frame
            self.view.addSubview(avController.view)
            self.addChild(avController)
            player.play()
        }

0

সুইফ্ট 5+

সবার আগে আপনাকে নিজের ভিউ কন্ট্রোলারের অভ্যন্তরে বিশ্বব্যাপী 2 টি ভেরিয়েবল সংজ্ঞায়িত করতে হবে।

var player: AVPlayer!
var playerViewController: AVPlayerViewController!

এখানে আমি একটি পছন্দসই দৃশ্যে প্লেয়ার যুক্ত করছি।

@IBOutlet weak var playerView: UIView!

তারপরে ভিউডিডলড পদ্ধতিতে নিম্নলিখিত কোড যুক্ত করুন ।

let videoURL = URL(string: "videoUrl")
self.player = AVPlayer(url: videoURL!)
self.playerViewController = AVPlayerViewController()
playerViewController.player = self.player
playerViewController.view.frame = self.playerView.frame
playerViewController.player?.pause()
self.playerView.addSubview(playerViewController.view)

আপনি যদি প্লেয়ার এবং প্লেয়ারভিউ কনট্রোলারকে বিশ্বব্যাপী সংজ্ঞায়িত না করে থাকেন তবে আপনি প্লেয়ার এম্বেড করতে সক্ষম হবেন না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.