如何使用 iOS 中的视频数据播放视频
how to play video using video data in iOS
我正在从服务器获取视频数据。我正在使用 signalR 框架。首先,我正在从 iPhone 照片库中捕捉视频。然后接下来我是转换编码格式(base64EncodedStringwithOptions
)的方法。接下来我将视频加密数据发送到 signalR 服务器。接下来我正在接收视频数据并使用 AVPlayer
解密和播放视频数据。但我的问题视频没有播放。但我收到了来自 signalR 的视频数据。为了解密,我正在使用这种方法。 (NSDataBase64DecodingIgnoreUnknownCharacters
)
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *videoFile=[documentDirectory stringByAppendingPathComponent:post.mediaName];
NSURL *url;
if ([[NSFileManager defaultManager] fileExistsAtPath:videoFile]) {
url=[NSURL URLWithString:videoFile];
}
NSLog(@"Video URL is:%@",url);
AVPlayer *player = [AVPlayer playerWithURL:url];
cell.videoPlayerController.player = player;
[player play];
我得到了这样的视频 URL:
Video URL is:/Users/Library/Developer/CoreSimulator/Devices/EEC96DE7-6D0F-4D80-82B8-3C24E4F6B3EF/data/Containers/Data/Applicatication video0006.mp4
您可以使用 MPMoviePlayerController
播放来自 url 的视频,但请确保您必须为此声明 属性,
@property MPMoviePlayerController *videoController;
不要创建 MPMoviePlayerController
的本地对象。
你可以像这样使用它,
self.videoController = [[MPMoviePlayerController alloc] init];
[self.videoController setContentURL:tempView.videoURL]; //here your url
[self.videoController.view setFrame:CGRectMake (0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view addSubview:self.videoController.view];
// close or cancel button if you want to put
UIButton *closeButton = [[UIButton alloc]initWithFrame:CGRectMake(self.view.frame.size.width-60, 20, 60, 30)];
[closeButton addTarget:self action:@selector(cancel:) forControlEvents:UIControlEventTouchUpInside];
[closeButton setTitle:@"Cancel" forState:UIControlStateNormal];
[self.videoController.view addSubview:closeButton];
// add observer to notify when playing will be completed if you want to put
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(videoPlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.videoController];
[self.videoController play];
更新:
您必须使用文件 url,例如
NSURL *url = [NSURL fileURLWithPath:videoFile];
而不是
[NSURL URLWithString:videoFile];
我正在从服务器获取视频数据。我正在使用 signalR 框架。首先,我正在从 iPhone 照片库中捕捉视频。然后接下来我是转换编码格式(base64EncodedStringwithOptions
)的方法。接下来我将视频加密数据发送到 signalR 服务器。接下来我正在接收视频数据并使用 AVPlayer
解密和播放视频数据。但我的问题视频没有播放。但我收到了来自 signalR 的视频数据。为了解密,我正在使用这种方法。 (NSDataBase64DecodingIgnoreUnknownCharacters
)
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *videoFile=[documentDirectory stringByAppendingPathComponent:post.mediaName];
NSURL *url;
if ([[NSFileManager defaultManager] fileExistsAtPath:videoFile]) {
url=[NSURL URLWithString:videoFile];
}
NSLog(@"Video URL is:%@",url);
AVPlayer *player = [AVPlayer playerWithURL:url];
cell.videoPlayerController.player = player;
[player play];
我得到了这样的视频 URL:
Video URL is:/Users/Library/Developer/CoreSimulator/Devices/EEC96DE7-6D0F-4D80-82B8-3C24E4F6B3EF/data/Containers/Data/Applicatication video0006.mp4
您可以使用 MPMoviePlayerController
播放来自 url 的视频,但请确保您必须为此声明 属性,
@property MPMoviePlayerController *videoController;
不要创建 MPMoviePlayerController
的本地对象。
你可以像这样使用它,
self.videoController = [[MPMoviePlayerController alloc] init];
[self.videoController setContentURL:tempView.videoURL]; //here your url
[self.videoController.view setFrame:CGRectMake (0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view addSubview:self.videoController.view];
// close or cancel button if you want to put
UIButton *closeButton = [[UIButton alloc]initWithFrame:CGRectMake(self.view.frame.size.width-60, 20, 60, 30)];
[closeButton addTarget:self action:@selector(cancel:) forControlEvents:UIControlEventTouchUpInside];
[closeButton setTitle:@"Cancel" forState:UIControlStateNormal];
[self.videoController.view addSubview:closeButton];
// add observer to notify when playing will be completed if you want to put
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(videoPlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.videoController];
[self.videoController play];
更新:
您必须使用文件 url,例如
NSURL *url = [NSURL fileURLWithPath:videoFile];
而不是
[NSURL URLWithString:videoFile];