如何在macOS上将iPhone作为AVCaptureDevice?



我已经实现了下面链接的帖子中的代码。但是,它没有更新以考虑AVCaptureDevice.devices((现在已被弃用。

iOS 裝置未被 AVCaptureDevice.devices(( 列出,除非 Quicktime 已開啟

有没有人对此有最新的实现?

谢谢!

好的,所以在做了一些其他一些Stack Overflow答案的组合之后,我能够让它与AVCaptureDevice.DiscoverySession的最新实现一起工作。

诀窍是在启用屏幕捕获设备后调用DiscoverSession以获取设备。然后添加观察器以查找新连接的设备,它将显示。

前面的答案都使用了旧的AVCaptureDevice.devices((方法。我下面的示例使用更新的方法。

import Cocoa
import Foundation
import AVKit
import CoreMediaIO
class PlayerNSView: NSView{
private let playerLayer = AVPlayerLayer()
private let nc = NotificationCenter.default
override init(frame:CGRect){
super.init(frame: frame)

let urlVideo = URL(string: "https://www.radiantmediaplayer.com/media/bbb-360p.mp4")!
let player = AVPlayer(url: urlVideo)
//player.play()
playerLayer.player = player
if layer == nil{
layer = CALayer()
}
layer?.addSublayer(playerLayer)
self.enableDalDevices()
let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.externalUnknown], mediaType: nil, position: .unspecified)

nc.addObserver(self, selector: #selector(newDevice), name: NSNotification.Name.AVCaptureDeviceWasConnected, object: nil)
}
@objc func newDevice() {
let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.externalUnknown], mediaType: nil, position: .unspecified)
print("Devices: (discoverySession.devices)")
}

public func enableDalDevices() {

var property = CMIOObjectPropertyAddress(mSelector: CMIOObjectPropertySelector(kCMIOHardwarePropertyAllowScreenCaptureDevices), mScope: CMIOObjectPropertyScope(kCMIOObjectPropertyScopeGlobal), mElement: CMIOObjectPropertyElement(kCMIOObjectPropertyElementMaster))
var allow : UInt32 = 1
let sizeOfAllow = MemoryLayout.size(ofValue: allow)
CMIOObjectSetPropertyData(CMIOObjectID(kCMIOObjectSystemObject), &property, 0, nil, UInt32(sizeOfAllow), &allow)
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layout() {
super.layout()
playerLayer.backgroundColor = .black
playerLayer.frame = bounds
}
}

最新更新