嵌入式视频播放多个方向?

时间:2011-08-02 09:13:46

标签: iphone html objective-c uiwebview html5-video

我想在我的UIWebView控件中播放dailymotion和youtube视频。而且我正在使用以下嵌入式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];

根据设备轮换重置我的视图的任何解决方案并继续播放而不重新启动..?

修改 视频在播放模式下完美改变方向。一旦我停止并尝试旋转视图,webview的内容就不会旋转。我正在寻找解决方案。

2 个答案:

答案 0 :(得分:0)

我已经为此制作了一个教程,并且它也在使用界面orienatation更改。

这是实施文件。只需将粘贴复制到控制器中,放入您的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

希望这会对你有所帮助。

如果您需要更多帮助,请告诉我。

修改: 这个代码很可能在模拟器上无法正常工作,因为模拟器没有一个shockwave-flash播放器

答案 1 :(得分:0)