【问题标题】:How to play youtube video using URL in AVPlayer IOS?如何在 AVPlayer IOS 中使用 URL 播放 youtube 视频?
【发布时间】:2014-11-02 18:59:29
【问题描述】:

我想使用 YouTube URL 在 AVPlayer 中加载视频,但它没有显示任何内容。每当我使用 NSBundle 从本地存储加载时,它工作正常。是否有任何替代加载视频的方法,或者我们可以在 AVPlayer 中做一些事情.

这是我的代码:

- (void)viewDidLoad
{
   [super viewDidLoad];
   NSError *setCategoryError = nil;
  [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error: &setCategoryError];
  AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:@"http://www.youtube.com/watch?v=zPP6lXaL7KA&feature=youtube_gdata_player"]];
  avPlayerItem = [[AVPlayerItem alloc]initWithAsset:asset];
  self.songPlayer = [AVPlayer playerWithPlayerItem:avPlayerItem];
  self.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer: self.songPlayer];
  self.avPlayerLayer.frame = self.view.layer.bounds;
  UIView *newView = [[UIView alloc] initWithFrame:self.view.bounds];
  [newView.layer addSublayer:avPlayerLayer];
  [self.view addSubview:newView];
  [ self.songPlayer play];
}

【问题讨论】:

  • 你能在 AVPlayer 中播放 YouTube 网址吗?

标签: ios objective-c ios7 youtube avplayer


【解决方案1】:

您应该使用 iOS Youtube Helper 库来播放 youtube 视频。

https://developers.google.com/youtube/v3/guides/ios_youtube_helper

我不知道你是否可以使用 AVPlayer。我见过一些在 CocoaControls 上使用 MPMoviePlayerController 的例子,比如这个:https://www.cocoacontrols.com/controls/hcyoutubeparser 或这个:https://www.cocoacontrols.com/controls/xcdyoutubevideoplayerviewcontroller

但我认为直接在播放器中使用 youtube 的 url 不符合平台的服务条款。所以如果你打算发布你的应用,我会推荐你​​使用 Youtube Helper Library。

【讨论】:

    【解决方案2】:
    • 使用XCDYouTubeKit pod
    • 从像https://www.youtube.com/watch?v=dLEATulyCdw这样的url获取youtube视频ID 您可以使用此代码:

      extension URL {
      
      func youtubeVideoId() -> String? {
      
          let pattern = #"(?<=(youtu\.be\/)|(v=)).+?(?=\?|\&|$)"#
          let testString = absoluteString
      
          if let matchRange = testString.range(of: pattern, options: .regularExpression) {
              let subStr = testString[matchRange]
              return String(subStr)
          } else {
              return .none
          }
      } }
      
    • 然后拨打XCDYouTubeClient.default().getVideoWithIdentifier(videoId)

    • 在完成中你可以得到 url。 video?.streamURLs 包含不同质量的网址,请选择所需。
    • 最后把这个url传给AVPlayer...

    更新 视觉解释

    使用first 而不是youtubeMaxAvailableQuality

    【讨论】:

    • 其实这个不行,能不能简单解释一下?
    • @BhaveshM.Sarsawa 究竟是什么不适合你?
    • 我没有收到任何视频网址
    • @BhaveshM.Sarsawa 使用 XCDYouTubeKit (2.8.2)。刚检查。但我记得它不适用于某些视频。您是否使用不同的视频对其进行了测试?
    • 谢谢先生,会检查:)
    【解决方案3】:

    我想你现在能不能用这个,因为我刚用这个,遇到了同样的情况。

    我阅读了苹果文档-,它肯定指的是(你不能直接创建一个AVAsset 实例来表示 HTTP Live Stream 中的媒体。)。

    这里是苹果的例子:

    NSURL *url = [NSURL URLWithString:@"<#Live stream URL#>];
    

    // 您可以在
    http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8 找到测试流。

    self.playerItem = [AVPlayerItem playerItemWithURL:url];
    

    看,如果不是本地url,应该是playerItemWithURL:^_^

    【讨论】:

      猜你喜欢
      • 2012-07-05
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 2018-02-27
      相关资源
      最近更新 更多