2017-09-08 2 views
-1

서로 옆에 두 개의 비디오를 재생하고 싶습니다. Mac 응용 프로그램을 만들 때 AVPlayer 개체를 사용하여이 작업을 수행했습니다. ViewController 내부에 배치 할 수있는 뷰입니다.Xcode Objective-C IOS - 서로 옆에 두 개의 비디오를 재생하는 방법?

그러나 IOS 프로젝트의 객체 라이브러리에서 AVPlayer 객체를 찾으려고 시도했지만 표시되지 않았습니다. AVKit 플레이어 뷰 컨트롤러 만했습니다.

그러나 AVKit 플레이어보기 컨트롤러는 항상 별도의 ViewController에서 비디오 전체 화면을 재생합니다. 나는 서로 옆에 두 개의 비디오를 표시하는 방법을 찾기 위해 인터넷을 검색했지만 지금까지는 유용한 것을 찾지 못했습니다.

내 질문은 : IOS 응용 프로그램에서 서로 옆에 두 개의 비디오를 표시 할 수있는 방법이 있습니까?

답변

0

는 그러나 AVKit 플레이어 뷰 컨트롤러는 항상 거짓 별도의 ViewController

에 동영상을 전체 화면으로 재생됩니다. 동영상보기를 하위보기로 표시하려면 AVPlayerViewController를 하위보기 컨트롤러로 만듭니다. 스토리 보드에서 컨테이너 뷰 컨트롤러로 시작하고 AVPlayerViewController에 Embed segue를 만듭니다.

또는 코드에서 AVPlayerViewController없이 AVPlayer를 사용할 수 있습니다.

0

AVPlayer은 iOS 4 이후 iOS에서 사용할 수 있습니다. AVPlayer은 UI 요소가 직접 연결되어 있지 않은 미디어 자산의 재생을 관리하는 컨트롤러 개체이므로 IB 개체 라이브러리에없는 이유입니다. 오히려 AVPlayerLayer을 사용하여 자신 만의 UI를 만들 수 있습니다. Apple의 표준 인 AVPlayerViewController을 사용합니다. 여기에는 기본 컨트롤과 표준 재생 동작이 포함되어 있습니다. 두 개의 동영상을 나란히 재생하는 가장 빠른 방법은 AVPlayerViewController의 두 인스턴스를 다른보기 컨트롤러에 포함하는 것입니다. 스토리 보드를 사용하는 경우 코드는 다음과 같이 짧을 수 있습니다.

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.destinationViewController isKindOfClass:[AVPlayerViewController class]] && [segue.identifier isEqualToString:@"First Player"]) 
    { 
     AVPlayerViewController *avPlayerViewController = (AVPlayerViewController *)segue.destinationViewController; 
     avPlayerViewController.player = [AVPlayer playerWithURL: [NSURL URLWithString:@"http://devstreaming.apple.com/videos/wwdc/2016/703rx8zlfedjfom6l93/703/hls_vod_mvp.m3u8"]]; 
     [avPlayerViewController.player play]; 

    } else if ([segue.destinationViewController isKindOfClass:[AVPlayerViewController class]] && [segue.identifier isEqualToString:@"Second Player"]) 
    { 
     AVPlayerViewController *avPlayerViewController = (AVPlayerViewController *)segue.destinationViewController; 
     avPlayerViewController.player = [AVPlayer playerWithURL: [NSURL URLWithString:@"http://devstreaming.apple.com/videos/wwdc/2016/703rx8zlfedjfom6l93/704/hls_vod_mvp.m3u8"]]; 
     [avPlayerViewController.player play]; 
    } 
} 

@end 

또는 이와 비슷한 것입니다. 대부분의 작업이 두 개의 컨테이너보기에 의해 수행되고 두 개의 세그먼트에 단을 묻는 경우 AVPlayerViewControllers 사용자 정의 비디오 UI가 필요한 경우 Apple's PIP sample code에서 사용자 정의 UI가있는 비디오 플레이어에 키 값 관측을 사용하는 방법을 보여줍니다.

1

// ViewController.h

@import AVFoundation; 
@import AVKit; 
@property(nonatomic, readonly) AVPlayerItem *currentItem; 

// ViewController.m

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    i=0; 
    [self videoPlay:[_passdataArr valueForKey:@"videoUrl"]]; 


} 

-(void)videoPlay:(NSArray*)links 
{ 
    NSLog(@"1"); 
    //create an AVPlayer 
    _detailView.hidden=YES; 
// NSMutableArray *videolinksArr=[[NSMutableArray alloc] init]; 
// videolinksArr=_videoLinkArr; 
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",links]]; 

    // create a player view controller 
    player = [AVPlayer playerWithURL:url]; 
    AVPlayerViewController *controller = [[AVPlayerViewController alloc] init]; 

    [self addChildViewController:controller]; 
    [self.view addSubview:controller.view]; 

    controller.view.frame = self.bgimg.frame; 
    controller.player = player; 
    controller.showsPlaybackControls = YES; 
    player.closedCaptionDisplayEnabled = NO; 
    [player pause]; 
    [player play]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AllVideoPlay:) name:AVPlayerItemDidPlayToEndTimeNotification object:_currentItem]; 



} 

-(void)AllVideoPlay:(NSNotification*)aNotification 
{ 
    NSLog(@"2"); 

    NSArray *temp = _videoLinkArr[i]; 
    [self videoPlay:temp]; 
    i++; 
}