2017-05-31 3 views
1

を維持しながら、フルスクリーンのリモートストリームを切り替えます私はのWebRTC遠隔ビデオストリームと協力し、これにリモートセッションを添付しています:スウィフト3、iOSの10+、Xcodeの8.3+、Quickblox - アスペクト比/ビデオ解像度

@IBOutlet weak var remoteVideoElement: QBRTCRemoteVideoView! 

私がしたいことは、ユーザーが上記のアウトレットをタップすると、リモートストリームがウィンドウ全体を満たすときです。ユーザーが再度タップすると、レイアウト内の通常の状態に戻ります。ほとんどの場合、リモートビデオストリームの正しいアスペクト比または画面解像度を維持できない場合を除き、正常に動作します。誰かが望む効果を得る正しい方法を見つけ出す手助けをすることができますか?ここで

は私のコードです:

var isExpanded = Bool() 
var videoPlayerViewCenter = CGPoint() 

override func viewDidLoad() { 
     super.viewDidLoad() 
     isExpanded = false 

     let toggleFullScreen = UITapGestureRecognizer(target: self, action: #selector (self.toggleFullScreenRemoteVideo(sender:))) 
     self.view.addGestureRecognizer(toggleFullScreen) 
} 

func toggleFullScreenRemoteVideo(sender: QBRTCRemoteVideoView) { 
     if !isExpanded { 
      // GO FULL SCREEN 
      UIView.animate(withDuration: 0.8, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: { 
       self.videoPlayerViewCenter = self.remoteVideoElement.center 
       self.view.bringSubview(toFront: self.modalShadeBackground) 
       self.view.bringSubview(toFront: self.remoteVideoElement) 
       self.remoteVideoElement.frame = CGRect(x: 0, y: 0, width: self.view.frame.height, height: self.view.frame.width) 
       self.remoteVideoElement.frame = AVMakeRect(aspectRatio: (self.remoteVideoElement.layer.preferredFrameSize()), insideRect: self.remoteVideoElement.frame) 
       self.remoteVideoElement.contentMode = .scaleAspectFit 
       self.remoteVideoElement.frame = UIScreen.main.bounds 
       self.remoteVideoElement.center = self.view.center 
       self.remoteVideoElement.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi/2)) 
       self.remoteVideoElement.layoutSubviews() 
      }, completion: nil) 
     } else { 
      // REVERT BACK TO ORIGINAL CONTRAINTS IN THE LAYOUT 
      UIView.animate(withDuration: 0.8, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: { 
       self.remoteVideoElement.transform = CGAffineTransform.identity 
       self.remoteVideoElement.center = self.videoPlayerViewCenter 
       self.view.sendSubview(toBack: self.remoteVideoElement) 
       self.view.sendSubview(toBack: self.modalShadeBackground) 
       self.remoteVideoElement.frame = AVMakeRect(aspectRatio: (self.remoteVideoElement.layer.preferredFrameSize()), insideRect: self.remoteVideoElement.frame) 
       self.remoteVideoElement.layoutSubviews() 
      }, completion: nil) 
     } 
     isExpanded = !isExpanded 
    } 

答えて

3

私はQBRTCRemoteVideoViewわからないですが、私は私のビデオ画像の比率を取得し、私のビデオビューのRECTに変換することにより、ビデオストリーミング と同様の問題を解決しました。 基本的にこのような:

let xScale = maxImageDrawingArea.size.width/imageSize.width  
let yScale = maxImageDrawingArea.size.height/imageSize.height 
let scaleFactor = xScale < yScale ? xScale : yScale; 

は、それがどのように行ったの

let height = maxImageDrawingArea.size.height * scaleFactor 
let width = maxImageDrawingArea.size.width * scaleFactor 

によってあなたの視野サイズは、その後

が私を更新remoteVideoElementあなたのケースでは、あなたの動画ホルダーを描画するために、この高さと幅を使用して取得;

幸運にも、

+0

この問題については、すぐにお返事します。 –

+0

ファイアウォールにミッションクリティカルな問題が発生したため、今日までこれまでには行きませんでした。私はあなたに50点満点を与えていないことが嫌いです。私がそれを解決するために何かできるかどうかを教えてください。 –

+0

ここにコードを追加できますか?具体的には、少なくともmaxImageDrawingAreaとimageSizeをキャストできますか?それらは何であるはずですか?どのように "私のビデオイメージの比率"を取得しますか? –

関連する問題