作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经实现了下面链接的帖子中的代码。但是,由于 AVCaptureDevice.devices() 现已弃用,因此它并未更新。
iOS Device not listed by AVCaptureDevice.devices() unless Quicktime is opened
有人有最新的实现吗?
谢谢!
最佳答案
好吧,在结合了其他一些 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
}
}
关于swift - 如何在 macOS 上将 iPhone 设为 AVCaptureDevice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59350500/
由“CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", ES_MULTILINE.."创建的文本框需要\r\n 换行。我将我的 stdoutput 重定向到那个文
我是一名优秀的程序员,十分优秀!