2016-02-05 17 views
17

Amaç, video dosyasını (* .mp4) kontrolsüz bir UIView içinde oynatmaktır.Arka plan/duvar kağıdı gibi kontroller olmadan UIView içinde video nasıl oynatılır?

ViewController'da bir arka plan/duvar kağıdı olarak kullanılacak ve diğer denetimler, yani, tablo görünümü, metin alanları, görüntüler, video oynatma görünümünde görüntülenecektir.

Bunu yapmanın daha iyi yolu nedir? Eğer

+0

Yerel Video veya You Tube Video URL kullanıyor mu? – Vidhyanand

+0

projeye ithal edilen yerel dosya olacaktır. Aslında her biri ayrı ayrı ViewController –

+0

için birkaç dosya (video) olacaktır. Bkz. Http://stackoverflow.com/questions/17922017/display-video-inside-the-uiwebview-not-in-device-full-screen – Vidhyanand

cevap

38

Ben yerli AVPlayer

1.Used AVFoundation ile hedefinize ulaştığınızı ederiz: oyuncu için

#import <AVFoundation/AVFoundation.h> 

2.Used özelliği:

@property (nonatomic) AVPlayer *avPlayer; 

3.Added video dosyasını "Video" klasörüne ekleyin ve projeye "Video" ekledik

etkinlik için oyuncuya

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"shutterstock_v885172.mp4" ofType:nil inDirectory:@"Video"]; 
NSURL *fileURL = [NSURL fileURLWithPath:filepath]; 
self.avPlayer = [AVPlayer playerWithURL:fileURL]; 
self.avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone; 

AVPlayerLayer *videoLayer = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer]; 
videoLayer.frame = self.view.bounds; 
videoLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
[self.view.layer addSublayer:videoLayer]; 

[self.avPlayer play]; 

5.Subscribed 4.Initialized - Video sonunda

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:[self.avPlayer currentItem]]; 
ilgili yöntemde en başından itibaren oynamaya

6.Resumed Video

- (void)itemDidFinishPlaying:(NSNotification *)notification { 
    AVPlayerItem *player = [notification object]; 
    [player seekToTime:kCMTimeZero]; 
} 
1
için oynadım

Swift

Swift'de benzer. Videoyu kaynak paketinize ekleyin. Benim dolu cevabım here.

import UIKit 
import AVFoundation 

class ViewController: UIViewController { 

    var player: AVPlayer? 

    @IBOutlet weak var videoViewContainer: UIView! 

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

    func initializeVideoPlayerWithVideo() { 

     // get the path string for the video from assets 
     let videoString:String? = Bundle.main.path(forResource: "SampleVideo_360x240_1mb", ofType: "mp4") 
     guard let unwrappedVideoPath = videoString else {return} 

     // convert the path string to a url 
     let videoUrl = URL(fileURLWithPath: unwrappedVideoPath) 

     // initialize the video player with the url 
     self.player = AVPlayer(url: videoUrl) 

     // create a video layer for the player 
     let layer: AVPlayerLayer = AVPlayerLayer(player: player) 

     // make the layer the same size as the container view 
     layer.frame = videoViewContainer.bounds 

     // make the video fill the layer as much as possible while keeping its aspect size 
     layer.videoGravity = AVLayerVideoGravity.resizeAspectFill 

     // add the layer to the container view 
     videoViewContainer.layer.addSublayer(layer) 
    } 

    @IBAction func playVideoButtonTapped(_ sender: UIButton) { 
     // play the video if the player is initialized 
     player?.play() 
    } 
}