मैं स्विफ्ट बेस मैक ओएस-एक्स एप्लिकेशन पर काम कर रहा हूं। उपयोगकर्ता एक वीडियो फ़ाइल का चयन करेगा और NSView नियंत्रक AVPlayerView का उपयोग कर वीडियो चलाएगा। उपयोगकर्ता AVPlayerView पर एक आयताकार खींच सकता है और मैंने इस कार्यक्षमता को हासिल किया है। चयनित क्षेत्र वीडियो को आयत में कैमरा पूर्वावलोकन दाईं ओर लेयर कैसे दिखाएं?स्विफ्ट AVPlayer में एक विशिष्ट वीडियो क्षेत्र कैसे प्राप्त करें?
var videoURL = NSURL() // The video file URL by the file chooser
var videoSize = NSSize() // Here the video resolution size will be kept i.e. 720*480
var player:AVPlayerView! // The AVPlayerView to play video
var cameraPreviewLayer:AVPlayerLayer! //The right bottom camera Preview Layer
var rectangleLayer:AVPlayerLayer! // The rectangle that will draw over AVPlayer while mouse dragging
var isClicked = false
var startPoint = NSPoint() // holds the starting point location of mouse pointer while draging
var rect:NSRect!
override func viewDidLoad() {
super.viewDidLoad()
self.player = AVPlayerView()
self.player.frame.origin = CGPoint(x: 0, y: 0)
self.player.setFrameSize(self.videoSize)
self.player.player = AVPlayer.playerWithURL(videoURL) as! AVPlayer
self.view.addSubview(self.player)
setupRectangle()
setupCameraPreviewLayer()
}
// intially setup white color rectangle that will draged over AVPlayer
func setupRectangle() {
self.rectangleLayer = AVPlayerLayer()
self.rectangleLayer.backgroundColor = NSColor.clearColor().CGColor
self.rectangleLayer.borderColor = NSColor.whiteColor().CGColor
self.rectangleLayer.borderWidth = 1.5
self.rectangleLayer.frame = self.player.bounds
}
// intially setup CameraPreview Layer that will show at right bottom of AVPlayer
func setupCameraPreviewLayer(){
cameraPreviewLayer = AVPlayerLayer(player: self.player.player)
//place the cameraPreview layer at right bottom
cameraPreviewLayer.frame.origin.x = self.player.framesize.width-100
cameraPreviewLayer.frame.origin.y = self.player.frame.origin.y-100
cameraPreviewLayer.frame.size.width = 100
cameraPreviewLayer.frame.size.height = 100
}
override func mouseDown(theEvent: NSEvent) {
startPoint = theEvent.locationInWindow
isClicked = true
removeCameraPreviewLayer()
}
override func mouseDragged(theEvent: NSEvent) {
var endPoint = theEvent.locationInWindow
if(isClicked){
rect = NSRect(x: startPoint.x, y: startPoint.y, width: -(startPoint.x-endPoint.x), height: -(startPoint.y-endPoint.y))
drawCustomRect(rect)
}
}
override func mouseUp(theEvent: NSEvent) {
var endPoint = theEvent.locationInWindow
if(isClicked){
// I think we have to do some magic code here
addCameraPreviewLayer()
}
isClicked = false;
}
// redraw the white color rectange over avplayer
func drawCustomRect(rect: NSRect) {
self.rectangleLayer.frame = rect
self.player.layer?.addSublayer(self.rectangleLayer)
}
// add Camera PreviewLayer from AVPlayer
func addCameraPreviewLayer() {
self.player.layer?.addSublayer(self.layer)
}
// remove Camera PreviewLayer from AVPlayer
func removeCameraPreviewLayer() {
self.cameraPreviewLayer.removeFromSuperlayer()
}
यहाँ इच्छा उत्पादन चित्र जो मैं चाहता है:
यहाँ कोड है:
यहाँ उत्पादन होता है।
मान लीजिए वीडियो एक आकार 720 * 480 है, उपयोगकर्ता एक आयत बनाएं है और इसके अंक हैं (x1, y1) (x2, y1) (x3, Y3) (x4, Y4)। मैं कैमरा पूर्वावलोकन परत (दाएं तल पर) में एक वीडियो कैसे फसल कर सकता हूं जो उपयोगकर्ता द्वारा चुने गए आयत के समान क्षेत्र का वीडियो दिखाता है?
कोई भी इस कार्यक्षमता को प्राप्त करने में सहायता करता है? मैंने इस पर और निकास पर कई दिन बिताए हैं।
नोट: मैं इसे आरओआई का उपयोग करके वीडियो प्रोसेसिंग द्वारा ओपन-सीवी में कर सकता हूं, लेकिन मूल स्विफ्ट भाषा में इसे करने की आवश्यकता है।
पर शुरू करना चाहिए था, मैं आपके प्रयास की सराहना करता हूं। लेकिन क्षमा करें, यह काम नहीं करता है। यह क्या कर रहा है कि, उपयोगकर्ता के अनुसार दाएं तल पर "कैमरा पूर्वावलोकन" परत का आकार बदलना वीडियो प्लेयर पर एक आयत खींचता है। यह कोड वीडियो परत के विशिष्ट क्षेत्र का चयन नहीं करता है। मैंने वीडियो प्रसंस्करण द्वारा ओपन-सीवी में पहले से ही वही कामकाजी आवश्यकता पूरी कर ली है। मैं सिर्फ मूल स्विफ्ट भाषा में समाधान ढूंढ रहा था लेकिन देशी स्विफ्ट पुस्तकालयों में इसका समाधान नहीं मिला। – Ali