2015-03-20 2 views
1

У меня проблема с ориентацией видеозахвата. в первую очередь его о приложении voip, в котором используется pjsip, который может передавать видео. видео снимается с использованием рамки AVCapture. поэтому проблема возникает при изменении ориентации устройства, тогда я также должен установить ориентацию захвата. , например:avcapture видео повторяющаяся часть при изменении ориентации

capConnection.videoOrientation = AVCaptureVideoOrientationLandscapeLeft;

он работает нормально, но у меня есть повтор часть изображения. enter image description here

поэтому вопрос в том, как избавиться от этой повторяющейся части изображения. Я пробовал это solution, но он продолжает сбой на vImageRotate90_ARGB8888 любой идеи, как решить эту проблему?

Чтобы попробовать это самостоятельно, вы можете получить видео PJSIP версии 2.3 с образцом компиляции проекта и запустить его на тестовом SIP-сервере.

Редактировать: слой предварительного просмотра повернут и масштабируется в порядке. конкретная проблема возникает при приеме RTP (видео) потока, когда это устройство вращается и отправляет изображения с повторяющимися ребрами. например, если iPadA (горизонтальный) запускает видеовызов с iPadB (по горизонтали), изображение прекрасное и не повторяющееся. но если iPadA поворачивается к вертикали, тогда iPadB получает это повторное изображение края. уведомление о вращении Ориентация подключения захвата устанавливается на текущую ориентацию устройства. Обратите внимание, что уровень предварительного просмотра имеет AVLayerVideoGravityResize, но это не влияет на исходящий видеопоток.

+0

Hello @Hashmat Khalil, я думаю, проблема связана с настройкой 'self.previewLayer'. вы правильно установили привязку после его поворота? –

+0

может это [ссылка] http://stackoverflow.com/questions/21258372/avcapturevideopreviewlayer-landscape-orientation поможет вам. –

+0

Это фактически не мой собственный слой предварительного просмотра. слой предварительного просмотра для моей собственной камеры выглядит хорошо. он нуждается в настройке и в порядке. но поток RTP из другой камеры iphone отправляет такую ​​повторяющуюся часть изображения. поэтому вопрос в том, как правильно повернуть и обрезать, а затем отправить его по RTP. –

ответ

0

Две ключевые части устанавливают autoresizingMask в viewDidLoad и настраивают ваш captureVideoPreviewLayer.frame на self.view.layer.bounds; в willAnimateRotationToInterfaceOrientation.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

     // 
     // react to device orientation notifications 
     // 
     [[NSNotificationCenter defaultCenter] addObserver : self 
               selector : @selector(deviceOrientationDidChange:) 
                name : UIDeviceOrientationDidChangeNotification 
               object : nil]; 

     [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 


} 


- (void) willAnimateRotationToInterfaceOrientation : (UIInterfaceOrientation)toInterfaceOrientation 
              duration : (NSTimeInterval)duration 
{ 

    captureVideoPreviewLayer.frame = self.view.layer.bounds; 

    [[captureVideoPreviewLayer connection] setVideoOrientation:toInterfaceOrientation]; 
} 



- (void)deviceOrientationDidChange: (NSNotification*)notification 
{ 
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; 

    switch (orientation) 
    { 
     case UIDeviceOrientationPortrait: 
     case UIDeviceOrientationPortraitUpsideDown: 
     case UIDeviceOrientationLandscapeLeft: 
     case UIDeviceOrientationLandscapeRight: 
      currentDeviceOrientation = orientation; 
      break; 

      // unsupported? 
     case UIDeviceOrientationFaceUp: 
     case UIDeviceOrientationFaceDown: 
     default: 
      break; 
    } 
} 
+0

Я добавил более подробную информацию к моему оригинальному вопросу, пожалуйста, проверьте это. но вкратце, слой предварительного просмотра в порядке. проблема возникает для потоковой передачи видео на другое устройство. –

Смежные вопросы