gpt4 book ai didi

swift - 如何在 Xcode macOS Cocoa 应用程序中嵌入和流式传输来自网络的视频?

转载 作者:行者123 更新时间:2023-11-28 15:30:15 25 4
gpt4 key购买 nike

我试图让我的 ma​​cOS Cocoa 应用程序 Xcode 项目在我为它提供指定的 URL 时播放一些视频。

为了简化问题,我们只使用一个空的 Xcode 项目。

我想获得与在我的 iOS 单 View 应用程序 中使用 AVPlayerViewController() 时相同的控制级别。在该应用程序中,我目前正在使用提供的解决方案 here

但是,只有第二个示例在我的 macOS Cocoa 应用程序中可以正常工作:

import Cocoa
import AVFoundation
import AVKit

class ViewController: NSViewController {

override func viewDidLoad() {
super.viewDidLoad()

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

}

override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}


}

但是,此选项有2 个缺点:

  1. 它在控制台中创建重复的错误消息:

    2017-06-27 18:22:06.833441+0200 testVideoOnmacOS[24456:1216773] initWithSessionInfo: XPC connection interrupted
    2017-06-27 18:22:06.834830+0200 testVideoOnmacOS[24456:1216773] startConfigurationWithCompletionHandler: Failed to get remote object proxy: Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.apple.rtcreportingd" UserInfo={NSDebugDescription=connection to service named com.apple.rtcreportingd}
  2. AVPlayer 解决方案不提供与 AVPlayerViewController() 解决方案相同的控制。

所以我试图让下面的 AVPlayerViewController() 解决方案起作用。但它失败了:

import Cocoa
import AVFoundation
import AVKit

class ViewController: NSViewController {

override func viewDidLoad() {
super.viewDidLoad()

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

}

override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}


}

我得到的错误是:

Use of unresolved identifier 'AVPlayerViewController' - Did you mean 'AVPlayerViewControlsStyle'?

我已经尝试通过许多不同的方式来解决这个问题。如果我把它们都拼写出来,那会很困惑。我的突出问题似乎是绝大多数在线示例都是基于 iOS 的。

Thus, the main question:

How would I be able to successfully use AVPlayerViewController within my Xcode macOS Cocoa Application?

最佳答案

是的,成功了!

感谢 ninjaproger 的评论。

为了在 Xcode 中的 ma​​cOS Cocoa 应用程序 上从网络播放/流式传输视频,这似乎可行。

首先,在您的 Storyboard上创建一个 AVKitPlayerView 并将其作为 IBOutlet 链接到您的 NSViewController。

然后,只需应用此代码:

import Cocoa
import AVFoundation
import AVKit

class ViewController: NSViewController {
@IBOutlet var videoView: AVPlayerView!

override func viewDidLoad() {
super.viewDidLoad()

let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let player = AVPlayer(url: videoURL!)
let playerViewController = videoView
playerViewController?.player = player
playerViewController?.player!.play()

}

override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}


}

2021 年 8 月更新

好吧,这个答案已经有一段时间了,我不再投入其中。但似乎其他人仍然在这里结束,解决方案有时需要更多工作才能正常工作。

感谢@SouthernYankee65:

有时需要转到项目文件并在“签名和功能”选项卡上选中Outgoing Connection (Client)。然后在info.plist中添加App Transport Security Settings dictionary property,然后添加Allows Arbitrary Loads boolean property并设置为YES

视频现在播放。但是,控制台中可能会出现一些错误。

关于swift - 如何在 Xcode macOS Cocoa 应用程序中嵌入和流式传输来自网络的视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44785787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com