无法加载URL AVPlayer不播放视频

时间:2016-05-26 07:22:59

标签: ios avplayer

*以下两行适用于想要在其应用中使用AVPlayer的用户。

如果我在注释中取消注释中间行,即NSURL * url并将第一行设置在注释下面,即playerWithUrl:url,并注释起始两行,则此播放器工作正常。

*下面是我的真实问题,我需要帮助。

但是我无法将URL设置为播放器方法 - playerWithURL的值,这是注释下面的第一行,我将通过我在2行开始创建的fileURL实例设置它。在调试器中,它显示* localfilepath中的API路径。但是当我通过fileURL设置播放器的本地文件路径时,它显示为nil。

但是如果我在评论中使用中间线,即设置* url for player一切正常。 帮助我将API转换为该播放器属性的URL

 NSString *localfilepath=[NSString stringWithFormat:@"%@",[managedObject valueForKey:@"clip_path"]];

 NSURL *fileURL=[NSURL fileURLWithPath:localfilepath]; //because  of this i am getting video URL but something @"file://" gets attached to it in the end thus not playing video URL because of that fileURLWithPath suggest something another way to fetch URL


//  videoAVURLAsset = [AVURLAsset assetWithURL:fileURL];
//   NSURL *url = [[NSURL alloc] initWithString:@"http://www.example.com/example_clips/SHAINA%20NC%20NEWS%20X%20180516%201657PM.mp4"];

// created player here //

  player = [AVPlayer playerWithURL:fileURL];   //here i want to set the value which is in the *localfileurl

  AVPlayerViewController *controller = [[AVPlayerViewController alloc] init];

  [self addChildViewController:controller];
  [self.view addSubview:controller.view];

  controller.view.frame = CGRectMake(10,80,300,300);
  controller.player = player;
  controller.showsPlaybackControls = YES;

  [player pause];
  [player play];

3 个答案:

答案 0 :(得分:1)

您应该使用[NSURL fileURLWithPath:]从本地文件路径字符串生成URL对象:

NSURL *fileURL = [NSURL fileURLWithPath:localfilepath];

答案 1 :(得分:0)

以下是我在iOS中播放视频的方式: 首先创建一个Web视图 然后将其链接到您的视图控制器代码 然后在viewdidload()

中添加它
    //add the video to the player
    let myYoutubeVideo = "https://www.youtube.com/embed/YNUEAxUGxyE"
    let myHTMLString = "<iframe width=\"\(videoPlayer.frame.width)\" height=\"\(videoPlayer.frame.height)\" src=\"\(myYoutubeVideo)?&playsinline=1\" frameborder=\"0\" allowfullscreen></iframe>"
    videoPlayer.allowsInlineMediaPlayback = true
    videoPlayer.loadHTMLString(myHTMLString, baseURL: nil)
    videoPlayer.frame = UIScreen.mainScreen().bounds
    videoPlayer.center = self.view.center
    videoPlayer.backgroundColor = UIColor.clearColor()

尝试将文件放在此目录中

#if TARGET_IPHONE_SIMULATOR
// where are you?
NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
#endif

这是模拟器中应用的Documents目录。然后尝试从那里运行它。 这样它应该像拔掉手机而不是你的本地电脑一样。

并试一试

file:///Users/codercat/Library/Developer/CoreSimulator/Devices/YourProjectDict/data/Containers/Data/Application/(sample digit)7F53CFB3-C534-443F-B595-62619BA808F2/Documents/your file located here

这个适用于Xcode 7及更高版本

答案 2 :(得分:0)

我已经成功了:)我找到答案:)如果你有很多视频网址并且你想直接在播放器中播放服务器中的视频,这是一个完整的解决方案,所以你需要先正确地获取所有剪辑路径并使用以下代码

//这里我使用核心数据管理对象获取从服务器下载的所有URL

NSString *localfilepath=[NSString stringWithFormat:@"%@",[managedObject valueForKey:@"clip_path"]];

//然后在下面的行我将它编码为NSUTF8StringEncoding格式       不要忘记这样做,否则视频将无法播放,因为它不是我的情况

   NSURL *url = [NSURL URLWithString:[localfilepath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

//及以下我已经为玩家分配了网址并创建了播放器

  player = [AVPlayer playerWithURL:url];

AVPlayerViewController *controller = [[AVPlayerViewController alloc] init];

[self addChildViewController:controller];
[self.view addSubview:controller.view];

controller.view.frame = CGRectMake(10,80,300,300);
controller.player = player;
controller.showsPlaybackControls = YES;
//player.closedCaptionDisplayEnabled = NO;
[player pause];
[player play];