আইওএস সুইফট - কীভাবে স্থানীয় এবং দূরবর্তী ভিডিওর অনুপাত পাবেন?


12

দৃশ্য: আমি একটি অ্যাপের ভিতরে একটি ওয়েবআরটিসি ভিউ তৈরি করছি ভিডিওগুলির ধারকটির সর্বদা উচ্চতা 160 হবে।

ধারকটির কেন্দ্রে সর্বাধিক 160 উচ্চতা সহ দূরবর্তী ভিডিওটি প্রদর্শিত হওয়া উচিত, ভিডিওর অনুপাতের সম্মানের জন্য প্রস্থকে ছোট করা উচিত। প্রস্থটিও প্রস্থের প্রস্থের চেয়ে বড় হতে পারে না, সেক্ষেত্রে প্রস্থটি প্রস্থের প্রস্থের সমান এবং উচ্চতাটি অনুপাতের অনুপাতে মানিয়ে নেওয়া উচিত।

উপরের ডানদিকে কোণে স্থানীয় ক্যামেরা থেকে সর্বোচ্চ 100 প্রস্থের সাথে স্থানীয় ভিডিও প্রদর্শিত হবে এবং উচ্চতা স্থানীয় ভিডিওর অনুপাতের সম্মানের জন্য মানিয়ে নেওয়া উচিত

এখন পর্যন্ত আমার কোড:

func createPeerConnection () {
    // some other code

    self.localStream = self.factory.mediaStream(withStreamId: "stream")
    let videoSource = self.factory.videoSource()

    let devices = RTCCameraVideoCapturer.captureDevices()
    if let camera = devices.last,
        let format = RTCCameraVideoCapturer.supportedFormats(for: camera).last,
        let fps = format.videoSupportedFrameRateRanges.first?.maxFrameRate {
        let intFps = Int(fps)
        self.capturer = RTCCameraVideoCapturer(delegate: videoSource)
        self.capturer?.startCapture(with: camera, format: format, fps: intFps)
        videoSource.adaptOutputFormat(toWidth: 100, height: 160, fps: Int32(fps))
    }

    let videoTrack = self.factory.videoTrack(with: videoSource, trackId: "video")
    self.localStream.addVideoTrack(videoTrack)

    DispatchQueue.main.async {
        if self.localView == nil {
            let videoView = RTCEAGLVideoView(frame: CGRect(x: self.view.frame.size.width - 105, y: 5, width: 100, height: 160))
            videoView.backgroundColor = UIColor.red

            self.view.addSubview(videoView)
            self.localView = videoView
        }
        videoTrack.add(self.localView!)
    }
}

func peerConnection(_ peerConnection: RTCPeerConnection, didAdd stream: RTCMediaStream) {
    self.remoteStream = stream
    if let videoTrack = stream.videoTracks.first {
        DispatchQueue.main.async {
            if self.remoteView == nil {
                let videoView = RTCEAGLVideoView(frame: CGRect(x: self.view.frame.size.width - 50, y: 0, width: 100, height: 160))
                videoView.backgroundColor = UIColor.green
                if let local = self.localView {
                    self.view.insertSubview(videoView, belowSubview: local)
                } else {
                    self.view.addSubview(videoView)
                }
                self.remoteView = videoView
            }
            videoTrack.add(self.remoteView!)
        }
    }
}

স্থানীয় বা দূরবর্তী যে কোনও একটির ভিডিওর অনুপাত কীভাবে পাবেন তা আমি জানি না। আমার যদি তা থাকে তবে আমি তাদের প্রত্যেকের জন্য উপযুক্ত প্রস্থ এবং উচ্চতাগুলি গণনা করতে পারি


আমি মনে করি এই সমাধানটি আপনার সমস্যার ক্ষেত্রে সহায়তা করবে < stackoverflow.com/questions/10433774/… >
দর্শন স্কে

উত্তর:


4

আপনি ভিডিওটির রেজোলিউশন পেতে AVURLAssetএবং ব্যবহার করতে পারেনCGSize

private func resolutionForLocalVideo(url: URL) -> CGSize? {
   guard let track = AVURLAsset(url: url).tracks(withMediaType: AVMediaTypeVideo).first else { return nil }
   let size = track.naturalSize.applying(track.preferredTransform)
   return CGSize(width: fabs(size.width), height: fabs(size.height))
} 

এখন, ব্যবহার natural sizeএবংpreferredTransform

var mediaAspectRatio: Double! // <- here the aspect ratio for video with url will be set

func initAspectRatioOfVideo(with fileURL: URL) {
  let resolution = resolutionForLocalVideo(url: fileURL)

  guard let width = resolution?.width, let height = resolution?.height else { 
     return 
  }

  mediaAspectRatio = Double(height / width)
}

এছাড়াও, আপনি স্কেল ফ্যাক্টরটি খুঁজে পেতে পারেন

float xScale = destination.size.width / imageSize.width; //destination is the max image drawing area.

float yScale = destination.size.height / imageSize.height;

float scaleFactor = xScale < yScale ? xScale : yScale;

এটিও অর্জন করা যায় GPUImageMovie, GPUImageCropFilterএবংGPUImageMovieWriter


আমার কোন ইউআরএল নেই আমার ওয়েবক্যাম এবং রিমোট ভিডিও ট্র্যাক থেকে ভিডিও উত্স এবং আরটিসিভিডিও ট্র্যাক যা আরটিসিভিডিও ট্র্যাক
জন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.