Embedded video playing with multiple orientations?

2019-04-02 07:43发布

I want to play dailymotion and youtube videos in my UIWebView control. And I'm using following embedded html code to play and it's working fine. But as device is being rotate, it's not resetting accordingly and if I call the following code again it will start to play video from beginning.

    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];

Any solution that reset my view according to the device rotation and continue playing without restarting..?

EDIT: Video is changing orientation perfectly in playing mode. Once I have stopped it and trying to rotate view, the webview's content does not rotating. And I am looking for the solution of that.

2条回答
做个烂人
2楼-- · 2019-04-02 08:05
Emotional °昔
3楼-- · 2019-04-02 08:06

I had made a tutorial for this and where it is working with interface orienatation changes also.

Here is the implementation file. Just copy paste into your controller,put your URL and try this code

 #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

Here is the header file for the 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

Hope this helps you.

If you require more help then please let me know.

EDIT: This code most probably wont work properly on simulator as simulator doesnt have a shockwave- flash player

查看更多
登录 后发表回答