Невозможно воспроизвести видео в MPMoviePlayer? - PullRequest
0 голосов
/ 06 июня 2018
NSURL *url =[[NSURL alloc]initWithString:@"http://www.youtube.com/watch?v=Jeh40KFFS5Y"];
  MPMoviePlayerController *player1 = [[MPMoviePlayerController alloc] initWithContentURL:url];
        [player1 setContentURL:url];
        [player1 setMovieSourceType:MPMovieSourceTypeFile];
        [[player1 view] setFrame:self.view.bounds];
        player1.scalingMode = MPMovieScalingModeNone;
        player1.repeatMode = MPMovieRepeatModeNone;
        [self.view addSubview: [player1 view]];
        [player1 play];

При воспроизведении URL-адреса в MPMoviePlayer я получаю следующую ошибку:

HTTP (http://) загрузка ресурса, поскольку она небезопасна. Временные исключения можно настроить с помощью информации вашего приложения.plist файл.

2018-06-06 11: 15: 31.891375 + 0530 vedio [1866: 137968] Задание. <1> завершено с ошибкой - код: -1022 2018-06-06 11: 15: 31.891439+0530 vedio [1866: 138011] Задание. <1> завершено с ошибкой - код: -1022 2018-06-06 11: 15: 32.269777 + 0530 vedio [1866: 137470] [Воспроизведение] Использование для устранения ошибки Error Domain = AVFoundationErrorDomainКод = -11800 «Операция не может быть завершена» UserInfo = {NSLocalizedFailureReason = Произошла неизвестная ошибка (-1022), NSLocalizedDescription = Операция не может быть завершена, NSUnderlyingError = 0x600000449e70 {Ошибка домена = NSOSStatusErrorDomain Code = -1022 "(null) "}} 2018-06-06 11: 15: 32.271275 + 0530 vedio [1866: 137470] [Воспроизведение] esРешение для элемента не может устранить ошибку: Ошибка Domain = AVFoundationErrorDomain Code = -11800" Операция можетне завершено "UserInfo = {NSLocalizedFailureReason = Произошла неизвестная ошибка (-1022), NSLocalizedDescription = Операция не может быть завершена, NSUnderlyingError = 0x600000449e70 {Ошибка домена = NSOSStatusErrorDomain Code = -1022" (null) "}} с ошибкой разрешения:(null) 2018-06-06 11: 15: 32.271423 + 0530 vedio [1866: 137470] [Воспроизведение] lay Воспроизведение не удалось с ошибкой: Ошибка Domain = AVFoundationErrorDomain Code = -11800 «Операция не может быть завершена» UserInfo = {NSLocalizedFailureReason= Произошла неизвестная ошибка (-1022), NSLocalizedDescription = Операция не может быть завершена, NSUnderlyingError = 0x600000449e70 {Error Domain = NSOSStatusErrorDomain Code = -1022 "(null)"}}, не разрешается (canResolve: NO, allowItemErrorResolution: NO)2018-06-06 11: 15: 32.301954 + 0530 vedio [1866: 137470] [Воспроизведение] ❗️Не удалось поставить в очередь любые элементы.

Ответы [ 4 ]

0 голосов
/ 06 июня 2018

Я проиграл видео с Youtube, используя
pod "youtube-ios-player-helper", "~> 0.1.4" , оно отлично работает.

После того, как выустановит этот модуль,

import "YTPlayerView.h"

  1. перетащите UIView и измените пользовательский класс на "YTPlayerView"

  2. @ свойство (слабое, неатомное) IBOutlet YTPlayerView * PlayerView;// создать розетку

В viewDidload вы можете написать однострочный код строки для воспроизведения видео

[self.PlayerView loadWithVideoId: @ "UQxxt6R5VtQ"];// Вы можете получить video_id от URL.
0 голосов
/ 06 июня 2018

Вы не активировали протокол безопасности транспорта приложения.Так что просто этого кода вам достаточно.Откройте файл info.plist с исходным кодом и вставьте мой код.

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
0 голосов
/ 06 июня 2018

ваше видео не будет воспроизводиться в нужном вам MPMoviePlayerController

одно решение использует

pod 'YouTubePlayer'

, используя модуль, который вам нужен, чтобы дать вам представление о трубе и вещи, но некоторые владельцы отключают воспроизведение в другом приложении

так что вам нужно решение, как если бы YouTube был там играть в YouTube или открыть в браузере

func playInYoutube(youtubeURL: String) {
        if let youtubeURL = URL(string: youtubeURL),
            UIApplication.shared.canOpenURL(youtubeURL) {
            // redirect to app
            UIApplication.shared.open(youtubeURL, options: [:], completionHandler: nil)
        } else if let youtubeURL = URL(string: youtubeURL) {
            // redirect through safari
            UIApplication.shared.open(youtubeURL, options: [:], completionHandler: nil)
        }
    }
0 голосов
/ 06 июня 2018

Вам необходимо добавить следующее в info.plist, так как вы используете небезопасное соединение (http://).

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
   <dict>
    <key>youtube.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>

или вы можете использовать ленивый метод.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

enter image description here

А затем попробуйте воспроизвести viedo.

Если проблема остается, попробуйте воспроизвести видео с https:// вместо http://.

Использование AVPlayer

NSURL *videoURL = [NSURL URLWithString:@"https://www.youtube.com/watch?v=Jeh40KFFS5Y"];
AVAsset *avAsset = [AVAsset assetWithURL:videoURL];
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:avAsset];
AVPlayer * avPlayer = [AVPlayer playerWithPlayerItem:item];

AVPlayerLayer *playerLayer = [[AVPlayerLayer alloc] initWithLayer:avPlayer];
playerLayer.frame = self.view.frame;
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

[self.view.layer addSublayer:playerLayer];
...