Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在Swift AVPlayer中获得特定的视频区域?_Ios_Macos_Swift_Avplayer_Avplayerlayer - Fatal编程技术网

Ios 如何在Swift AVPlayer中获得特定的视频区域?

Ios 如何在Swift AVPlayer中获得特定的视频区域?,ios,macos,swift,avplayer,avplayerlayer,Ios,Macos,Swift,Avplayer,Avplayerlayer,我正在研究Swift base MAC OS-X应用程序。用户将选择一个视频文件,NSView控制器将使用AVPlayerView播放视频。用户可以在AVPlayerView上绘制一个矩形,我已经实现了这个功能。如何在右下角的相机预览层中以矩形显示选定区域的视频 以下是输出: 代码如下: var videoURL = NSURL() // The video file URL by the file chooser var videoSize = NSSize() // Here the vi

我正在研究Swift base MAC OS-X应用程序。用户将选择一个视频文件,NSView控制器将使用AVPlayerView播放视频。用户可以在AVPlayerView上绘制一个矩形,我已经实现了这个功能。如何在右下角的相机预览层中以矩形显示选定区域的视频

以下是输出:

代码如下:

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)。如何在相机预览层(右下角)中裁剪视频,该层显示与用户选择的矩形相同的区域的视频

有人帮我实现这个功能吗?我花了很多天在这个和排气


注意:我可以在OpenCV中使用ROI进行视频处理,但要求使用母语SWIFT

嘿,你找到解决办法了吗?在同样的情况下坚持了几天。不幸的是,我还没有用母语swift找到解决方案。通过在我的swift语言项目中集成OpenCV,我已经完成了这个问题。让我解释一下解决办法;1) 打开视频2)添加用户选择区域的功能3)使用Open cv按帧对视频进行切片(视频由多个帧组成,然后依次称为FPS)3)从视频帧(用户选择的)中获取ROI,并在播放器中使用Open cv处理的选定视频帧片段播放。