【问题标题】:How can I play a video using AVPlayer?如何使用 AVPlayer 播放视频?
【发布时间】:2017-02-23 08:18:04
【问题描述】:

Apple Swift 版本 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)

我想使用 AVPlayer 播放来自互联网的视频。 但是,在下面源列表的 AVPlayer.swift 中发生了错误“super.init(frame:frame)”。

线程 1:EXC_BAD_ACCESS(代码=2,地址=0x16fc07fe0)

如何使用 AVPlayer 播放视频? 如果除了错误点之外还有错误点,也请告诉我。

AVPlayerView.swift

import Foundation
import UIKit

final class AVPlayerView : UIView {
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
    }
    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    override public class var layerClass: Swift.AnyClass {
        get {
            return AVPlayerView.self
        }
    }

}

ViewController.swift

import UIKit
import AVFoundation
import CoreMedia

class ViewController: UIViewController {
    var playerItem : AVPlayerItem!
    var videoPlayer : AVPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()
        let url:NSURL = NSURL(string: "https://aaa.com/test.m3u8")!
        let avAsset = AVURLAsset(url: url as URL, options: nil)

        playerItem = AVPlayerItem(asset: avAsset)

        videoPlayer = AVPlayer(playerItem: playerItem)

        print(self.view.bounds)
        let videoPlayerView = AVPlayerView(frame: self.view.bounds)

        let layer = videoPlayerView.layer as! AVPlayerLayer
        layer.videoGravity = AVLayerVideoGravityResizeAspect
        layer.player = videoPlayer

        self.view.layer.addSublayer(layer)
        videoPlayer.play()
    }

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

【问题讨论】:

    标签: swift avplayer


    【解决方案1】:

    这是播放视频的代码:

    let videoURL = NSURL(string: "PUT_YOUR_PROPER_URL")
    let playerAV = AVPlayer(url: videoURL! as URL)
    let playerLayerAV = AVPlayerLayer(player: playerAV)
    playerLayerAV.frame = self.view.bounds
    self.view.layer.addSublayer(playerLayerAV)
    playerAV.play()
    

    AVPlayer 支持以下扩展:

    public.mpeg
    public.mpeg-2-video
    public.avi
    public.aifc-audio
    public.aac-audio
    public.mpeg-4
    public.au-audio
    public.aiff-audio
    public.mp2
    public.3gpp2
    public.ac3-audio
    public.mp3
    public.mpeg-2-transport-stream
    public.3gpp
    public.mpeg-4-audio
    

    确保您可以在 AVPlayer 中使用支持的视频。

    【讨论】:

    • AVPlayer是否支持m3u8的http直播? HLS 包含 H.264 和 aac 的 ts 文件。
    • 是的,网址已更改。 iPhone的浏览器可以播放网址。
    • 我可以播放 m3u8 视频流。
    • 谢谢!我尝试播放 .mov 的时间最长,但事实证明,我也没有设置 AVPlayerLayer 的帧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2018-04-13
    相关资源
    最近更新 更多