在iOS应用程序(xcode)中使用本地视频文件

在iOS应用程序(xcode)中使用本地视频文件,ios,xcode,video,local-storage,Ios,Xcode,Video,Local Storage,我正在寻找在iOS应用程序中播放视频文件的最佳方式。我的应用程序目前正在开发中,将有大约50个视频(每30秒长)和简短的教程。如果可能的话,我希望它们都是本地的,这样用户就可以在没有互联网连接的情况下观看视频。我在堆栈溢出上找不到类似的问题(可能我找错了部分,如果我错了,请纠正我) 所以我考虑了两种不同的选择: 用户从应用商店下载应用程序,包括视频 用户下载应用程序时没有视频,首次使用应用程序时必须先下载视频并保存 局部(永久) 如果有更好的选择,我也想知道! 因此,如果有人有这方面的经验,

我正在寻找在iOS应用程序中播放视频文件的最佳方式。我的应用程序目前正在开发中,将有大约50个视频(每30秒长)和简短的教程。如果可能的话,我希望它们都是本地的,这样用户就可以在没有互联网连接的情况下观看视频。我在堆栈溢出上找不到类似的问题(可能我找错了部分,如果我错了,请纠正我)

所以我考虑了两种不同的选择:

  • 用户从应用商店下载应用程序,包括视频
  • 用户下载应用程序时没有视频,首次使用应用程序时必须先下载视频并保存 局部(永久)
如果有更好的选择,我也想知道!
因此,如果有人有这方面的经验,我真的很感谢一些帮助!谢谢

根据用户的观点,人们更喜欢离线模式。并希望在从Appstore下载应用程序时,应用程序大小尽可能小。 所以我的建议是建立一个视频播放器,它既可以在用户在线时播放文件,也可以离线播放可下载或缓存的文件

一种方法是:

使用Web服务器

简单java服务器示例:

检查:

最好是建立一个应用程序,让用户能够下载和存储应用程序内容 从应用商店下载应用程序后。 应用程序应具有删除应用程序下载的视频或清除缓存的选项

down是视频播放器的一个例子,它可以播放离线和在线视频

制作一个定制的电影播放器。。

当您单击TableListView单元格时,使您的播放器视图可见。 制作一个URL下载程序。在中保存文件。


因此,这将允许您保存文件并播放+播放应用程序中已存在的预加载文件。

如果您不需要下载答案,请告诉我。将很高兴更改或删除。@rahul_send89非常感谢您的回答!我会尝试在我的应用程序中实现这一点,看看这是否真的是我想要的,如果是,我会接受你的答案。
//CustomMoviePlayerViewController.h File 
#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>

@interface CustomMoviePlayerViewController : UIViewController 
{
    MPMoviePlayerController *mp;
    NSURL *movieURL;
}

- (id)initWithPath:(NSString *)moviePath;
- (id)initWithURL:(NSString *)moviePath;
- (void)readyPlayer;

@end
#import "CustomMoviePlayerViewController.h"

#pragma mark -
#pragma mark Compiler Directives & Static Variables

@implementation CustomMoviePlayerViewController

/*---------------------------------------------------------------------------
* 
*--------------------------------------------------------------------------*/
- (id)initWithPath:(NSString *)moviePath
{
    // Initialize and create movie URL
  if (self = [super init])
  {
      movieURL = [NSURL fileURLWithPath:moviePath];    
    [movieURL retain];
  }
    return self;
}
- (id)initWithURL:(NSString *)moviePath{
    // Initialize and create movie URL
    if (self = [super init])
    {
        movieURL = [NSURL URLWithString:moviePath];    
        [movieURL retain];
    }
    return self;

}

/*---------------------------------------------------------------------------
* For 3.2 and 4.x devices
* For 3.1.x devices see moviePreloadDidFinish:
*--------------------------------------------------------------------------*/
- (void) moviePlayerLoadStateChanged:(NSNotification*)notification 
{
    // Unless state is unknown, start playback
    if ([mp loadState] != MPMovieLoadStateUnknown)
  {
    // Remove observer
    [[NSNotificationCenter  defaultCenter] 
                                                    removeObserver:self
                                name:MPMoviePlayerLoadStateDidChangeNotification 
                                object:nil];

    // When tapping movie, status bar will appear, it shows up
    // in portrait mode by default. Set orientation to landscape
    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO];

        // Rotate the view for landscape playback
      [[self view] setBounds:CGRectMake(0, 0, 480, 320)];
        [[self view] setCenter:CGPointMake(160, 240)];
        [[self view] setTransform:CGAffineTransformMakeRotation(M_PI / 2)]; 

        // Set frame of movieplayer
        [[mp view] setFrame:CGRectMake(0, 0, 480, 320)];

    // Add movie player as subview
      [[self view] addSubview:[mp view]];   

        // Play the movie
        [mp play];
    }
}

/*---------------------------------------------------------------------------
* For 3.1.x devices
* For 3.2 and 4.x see moviePlayerLoadStateChanged: 
*--------------------------------------------------------------------------*/
- (void) moviePreloadDidFinish:(NSNotification*)notification 
{
    // Remove observer
    [[NSNotificationCenter  defaultCenter] 
                                                    removeObserver:self
                            name:MPMoviePlayerContentPreloadDidFinishNotification
                            object:nil];

    // Play the movie
    [mp play];
}

/*---------------------------------------------------------------------------
* 
*--------------------------------------------------------------------------*/
- (void) moviePlayBackDidFinish:(NSNotification*)notification 
{    
  [[UIApplication sharedApplication] setStatusBarHidden:YES];

    // Remove observer
  [[NSNotificationCenter    defaultCenter] 
                                                removeObserver:self
                            name:MPMoviePlayerPlaybackDidFinishNotification 
                            object:nil];

    [self dismissModalViewControllerAnimated:YES];  
}

/*---------------------------------------------------------------------------
*
*--------------------------------------------------------------------------*/
- (void) readyPlayer
{
    mp =  [[MPMoviePlayerController alloc] initWithContentURL:movieURL];

  if ([mp respondsToSelector:@selector(loadState)]) 
  {
    [mp setMovieSourceType:MPMovieSourceTypeFile];
    // Set movie player layout
    [mp setControlStyle:MPMovieControlStyleFullscreen];
    [mp setFullscreen:YES];

        // May help to reduce latency
        [mp prepareToPlay];

        // Register that the load state changed (movie is ready)
        [[NSNotificationCenter defaultCenter] addObserver:self 
                       selector:@selector(moviePlayerLoadStateChanged:) 
                       name:MPMoviePlayerLoadStateDidChangeNotification 
                       object:nil];
    }  
  else
  {
    // Register to receive a notification when the movie is in memory and ready to play.
    [[NSNotificationCenter defaultCenter] addObserver:self 
                         selector:@selector(moviePreloadDidFinish:) 
                         name:MPMoviePlayerContentPreloadDidFinishNotification
                         object:nil];
  }

  // Register to receive a notification when the movie has finished playing. 
  [[NSNotificationCenter defaultCenter] addObserver:self 
                        selector:@selector(moviePlayBackDidFinish:) 
                        name:MPMoviePlayerPlaybackDidFinishNotification 
                        object:nil];
}

/*---------------------------------------------------------------------------
* 
*--------------------------------------------------------------------------*/
- (void) loadView
{
  [self setView:[[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease]];
    [[self view] setBackgroundColor:[UIColor blackColor]];
}

/*---------------------------------------------------------------------------
*  
*--------------------------------------------------------------------------*/
- (void)dealloc 
{
    [mp release];
  [movieURL release];
    [super dealloc];
}

@end
//- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSString *filePath = [NSString stringWithFormat:@"%@",[documentsDirectory stringByAppendingPathComponent:[item valueForKey:@"URL"]]];
        bool b=[[NSFileManager defaultManager] fileExistsAtPath:filePath];

CustomMoviePlayerViewController *moviePlayer;

if (b) {
    moviePlayer = [[[CustomMoviePlayerViewController alloc] initWithPath:filePath] autorelease];
    [self presentModalViewController:moviePlayer animated:YES];
    [moviePlayer readyPlayer];
}else{
    NSDictionary *item = [tableData objectAtIndex:[indexPath row]];
    NSString *strURL = [NSString stringWithFormat:[item valueForKey:@"URL"]];
    moviePlayer = [[[CustomMoviePlayerViewController alloc] initWithURL:strURL] autorelease];
    [self presentModalViewController:moviePlayer animated:YES];
    [moviePlayer readyPlayer];
}
-(void)downloadFile:(NSString *)UrlAddress
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:UrlAddress]];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
NSString *fileName = UrlAddress;

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:fileName];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Successfully downloaded file to %@", path);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {

    NSLog(@"Download = %f", (float)totalBytesRead / totalBytesExpectedToRead);

}];
[operation start];
}