Встроенное воспроизведение видео в разных ориентациях? - PullRequest
2 голосов
/ 02 августа 2011

Я хочу воспроизводить видео Dailymotion и YouTube в моем элементе управления UIWebView.И я использую следующий встроенный HTML-код, чтобы играть, и он работает нормально.Но поскольку устройство вращается, оно не переустанавливается соответствующим образом, и если я снова вызову следующий код, оно начнет воспроизводить видео с начала.

    NSString* embedHTML = @"<html><head><style>body {\"background-color:transparent;color:black;\"}</style></head><body style=\"margin:0\"><embed id=\"yt\" src=\"%@\"type=\"application/x-shockwave-flash\"width=\"%.0f\" height=\"%.0f\"></embed></body></html>";
    NSString* html = [NSString stringWithFormat:embedHTML, url, frame.size.width, frame.size.height];

Любое решение, которое сбрасывает мой вид в соответствии с поворотом устройства и продолжаетвоспроизведение без перезапуска ..?

РЕДАКТИРОВАТЬ: Видео идеально меняет ориентацию в режиме воспроизведения.После того, как я остановил его и попытался повернуть представление, содержимое веб-просмотра не вращается.И я ищу решение этого.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2013

Вы можете интегрировать следующий код: http://www.mightymeta.co.uk/embedding-youtube-within-iphone-apps/

0 голосов
/ 02 августа 2011

Я сделал учебник для этого и где он работает с изменениями ориентации интерфейса.

Вот файл реализации.Просто скопируйте вставить в свой контроллер, введите свой URL и попробуйте этот код

 #import "TestVideoViewController.h"
 #import "UICommonUtils.h"

@implementation TestVideoViewController
@synthesize TestVideoView;


- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    //sleep(10.0);
    [busyLoadingView hide:YES];
    //bShow = NO;
} 

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    //sleep(10.0);
    [busyLoadingView hide:YES];
    //bShow = NO;
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
     //bShow = YES;
     //[busyLoadingView showWhileExecuting:@selector(showCursor:) onTarget:self withObject:nil animated:YES];

     //[busyLoadingView show:YES];
     return YES;
}

 - (void)webViewDidStartLoad:(UIWebView *)webView
{
    [busyLoadingView show:YES];
}

-(void)viewWillDisappear:(BOOL)animated
{
    [self embedVideo1:@"PASS HERE URL1" andVideo2:@"PASS HERE URL2" frame:self.view.frame];
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
       [super viewDidLoad];

    CGRect rectFrame = [UIScreen mainScreen].applicationFrame;

    self.view.frame = rectFrame;
    self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    self.view.autoresizesSubviews = YES;
    //TestVideoView.scalesPageToFit = YES;
//TestVideoView.backgroundColor = [UIColor clearColor];

    busyLoadingView = [[MBProgressHUD alloc] initWithView:self.view];


    // Add HUD to screen
    [self.view addSubview:busyLoadingView];

    busyLoadingView.labelText = @"Loading...";

    [self embedVideo1:@"PASS HERE URL1" andVideo2:@"PASS HERE URL2" frame:self.view.frame];

    //self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    //self.view.autoresizesSubviews = YES;

}

- (void)embedVideo1:(NSString*)url1 andVideo2:(NSString*)url2 frame:(CGRect)frame {  
        float videoWidth = 748.0;
    float videoHeight = 341.0;
    //int marginLeft = 10;
    //int marginTop = 10;

    if ([UICommonUtils isiPad]){
        videoWidth = 748.0;
        videoHeight = 341.0;
        //marginLeft = (int)(frame.size.width - videoWidth) /2;
        //marginTop = 10;
    } else {
        videoWidth = 300.0;
        videoHeight = 160.0;
        //marginLeft = 10;
        //marginTop = 10;
    }

    NSString* embedHTML = @" \
         <html><head> \
     <style type=\"text/css\"> \
     .style11 { \
     font-family:Arial,Helvetica,sans-serif; \
     font-weight:bold; \
     font-size:16; \
    } \
     .style12 { \
     width: \"%0.0f\"; \
     height=\"%0.0f\" \
     align = center; \
     } \
     .style21 { \
     font-family:Arial,Helvetica,sans-serif; \
     font-weight:bold; \
     font-size:16; \
     } \
     .style22 { \
     width: \"%0.0f\"; \
     height=\"%0.0f\" \
     align = center; \
     } \
     body {\
     background-color: transparent; \
     color: black; \
     } \
    </style> \
    </head><body> \
    <table> \
    <tr><td><span class=\"style11\">1) Collecting and Editing Leads</span></td></tr> \
    <tr><td height=20></td></tr> \
    <tr><td class=\"style12\"> \
    <embed id=\"yt1\" src=\"%@\" type=\"application/x-shockwave-flash\" width=\"%0.0f\" height=\"%0.0f\">  \
        </embed> \
    </td></tr> \
    <tr height=20></tr> \
    <tr><td><span class=\"style21\">2) Accessing Leads Online</span></td></tr> \
    <tr><td height=20></td></tr> \
    <tr><td class=\"style22\"> \
    <embed id=\"yt2\" src=\"%@\" type=\"application/x-shockwave-flash\" width=\"%0.0f\" height=\"%0.0f\">  \
    </embed> \
    </td></tr> \
    </table> \
       </body></html>";  
    NSString* html = [NSString stringWithFormat:embedHTML, videoWidth, videoHeight, videoWidth, videoHeight, url1, videoWidth, videoHeight, url2, \
                  videoWidth, videoHeight];  
    //NSString* html = [NSString stringWithFormat:embedHTML, videoWidth, videoHeight, videoWidth, videoHeight, url1, videoWidth-20, videoHeight, url2, \
    //                videoWidth-20, videoHeight];   
   /*
    if(videoView == nil) {  
        videoView = [[UIWebView alloc] initWithFrame:frame];  
        [self.view addSubview:videoView];  
    } */ 
    //[TestVideoView loadHTMLString:html baseURL:nil];  
    [(UIWebView *)self.view loadHTMLString:html baseURL:nil];  
}  


 // Override to allow orientations other than the default portrait orientation.
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     // Return YES for supported orientations
     //return (interfaceOrientation == UIInterfaceOrientationPortrait);
 //return YES;
    if([UICommonUtils isiPad]) return YES;
    else return NO;
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    //CGRect rectFrame = [UIScreen mainScreen].applicationFrame;

    //self.view.frame = rectFrame;
    //NSLog([NSString stringWithFormat:@"origin x: %f origin y: %f width: %f height: %f", rectFrame.origin.x,
    //     rectFrame.origin.y, rectFrame.size.width, rectFrame.size.height]);

    //TestVideoView.frame = CGRectMake(rectFrame.origin.x, rectFrame.origin.y, rectFrame.size.height, rectFrame.size.width);    
 }

 - (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

     // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


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


@end

Вот заголовочный файл для ViewController

 #import <UIKit/UIKit.h>
 #import "MBProgressHUD.h"


 @interface TestVideoViewController : UIViewController<UIWebViewDelegate>{
    UIWebView *TestVideoView;
    MBProgressHUD *busyLoadingView;
    BOOL bShow;
}

@property (nonatomic, retain) IBOutlet UIWebView *TestVideoView;

- (void)embedVideo1:(NSString*)url1 andVideo2:(NSString*)url2 frame:(CGRect)frame;

@end

Надеюсь, это поможет вам.

Если вам требуется дополнительная помощь, пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ: Этот код, скорее всего, не будет работать должным образом на симуляторе, так как на симуляторе нет проигрывателя ударно-волновой флешки

...