UIWebView для воспроизведения локального и загруженного видео

Я хочу воспроизвести загруженное видео с помощью UIWebview. Я получаю ошибку webkiterrordomain code=204. но если я воспроизвожу видео из папки ресурсов, оно работает отлично. //из папки ресурсов запускается отлично

NSString *tempurl = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"video.mp4"];
   //from downloaded file
 NSString *tempurl = downloaded path;
NSURL* urlLocation = [NSURL fileURLWithPath:tempurl];
[webView loadRequest:[NSURLRequest requestWithURL:urlLocation]];

Спасибо.


person Mehar    schedule 05.03.2010    source источник


Ответы (4)


Решение здесь, вы можете воспроизводить видео во встроенном UIWebView.

- (void)viewDidLoad {

[super viewDidLoad];

NSString *embedHTML = @"\
<html><head>\
<style type=\"text/css\">\
body {\
background-color: transparent;\
color: white;\
}\
</style>\
</head><body style=\"margin:0\">\
<embed id=\"yt\" src=\"http://www.businessfactors.de/bfcms/images/stories/videos/defaultscreenvideos.mp4\" type=\"application/x-shockwave-mp4\" \
width=\"%0.0f\" height=\"%0.0f\"></embed>\
</body></html>";

webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 412.0)];

[webView setOpaque:NO];
NSString *html = [NSString stringWithFormat:embedHTML, webView.frame.size.width, webView.frame.size.height];
[webView loadHTMLString:html baseURL:nil];

[self.view addSubview:webView];

}

person Apekshit    schedule 02.02.2011

WebkitErrorDomain 204 просто означает, что видео будет воспроизводиться на MPInlinePlayerController. Так что вам просто нужно игнорировать ошибку, и видео будет воспроизводиться.

person crawler    schedule 11.09.2012
comment
Не уверен, что есть лучший способ игнорировать это, но я сделал следующее в методе webView:didFailLoadWithError:: if (error.code == 204){ NSLog(@"%s: ignoring ERROR 204...", __FUNCTION__); [self webViewDidFinishLoad:webView];} - person Jalakoo; 04.12.2013

Сгенерировать html. Вставьте в него свое видео. Включите как html, так и видеофайл в ресурсы проекта. Затем загрузите html из веб-просмотра.

person ahmet emrah    schedule 05.03.2010

Для воспроизведения локального видеофайла вы можете использовать MPMoviePlayerController.

- (void) playVideo:(NSString *) videoName {
if ([self.fileManager fileExistsAtPath:videoName]) {
    [self stopVideo];
    self.videoPlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:videoName]];
    [self.videoPlayer.view setFrame:CGRectMake(0, 0, 480, 360)];
    CGAffineTransform t1;
    t1 = CGAffineTransformMakeScale(-1.0,1.0);
    self.videoPlayer.view.layer.transform = CATransform3DMakeAffineTransform(t1);
    [self.view addSubview:self.videoPlayer.view];
    [self.videoPlayer setControlStyle:MPMovieControlStyleNone];
    [self.videoPlayer setScalingMode:MPMovieScalingModeAspectFit];
    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(movieFinishedCallback:)
     name:MPMoviePlayerPlaybackDidFinishNotification
     object:self.videoPlayer];
    [self.videoPlayer play];
}

}

- (void)stopVideo {
if (self.videoPlayer) {
    if ([self.videoPlayer playbackState] == MPMoviePlaybackStatePlaying) {
        [self.videoPlayer stop];
    }
    [self.videoPlayer.view removeFromSuperview];
    self.videoPlayer = nil;
}

}

- (void) movieFinishedCallback:(NSNotification*) aNotification {
MPMoviePlayerController *player = [aNotification object];
[[NSNotificationCenter defaultCenter]
 removeObserver:self
 name:MPMoviePlayerPlaybackDidFinishNotification
 object:player];
[self.videoPlayer.view removeFromSuperview];

}

person Thiru    schedule 18.11.2014
comment
Использование MPMoviePlayerController поверх UIWebView во многих отношениях лучше. Пожалуйста, заберите свой отрицательный голос, когда узнаете об этом. :) - person Thiru; 12.05.2016