ios حل - غير قادر على تشغيل ملف فيديو MP4 من mainBundle




مشكلة النت (7)

أنت في حاجة للتحقق ما إذا كان هذا الفيديو متوفر في حزمة موارد التطبيق الخاص بك.

كما ذكرت you getting this error message: * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSURL initFileURLWithPath:]: nil string parameter .

إنها تشير ببساطة إلى أن المشكلة في ResourcePath ، تعني أنه لا يوجد مثل هذا الملف موجود في Resource Bundle.that's لماذا يقوم pathForResource بإرجاع مسار nil .

تحتاج إلى وضع ملف الفيديو هذا مرة أخرى وتأكد من وجود هذا الملف موجود في حزمة الموارد.

ثم يجب عليك الذهاب مع رمز كما Rehan كما نشرت.

  NSURL *url = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"video" ofType:@"mov" inDirectory:@""]];

  MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
  [[player view] setFrame:[self.view bounds]]; // Frame must match parent view
  [self.view addSubview:[player view]];
  [player play];
  [player release];

آمل أنه قد يستحق الكامل لك.

شكر

لذا أحاول تشغيل ملف فيديو تعريفي بسيط مقدمة قمت بسحبه إلى مشروعي في XCode وبالتالي يجب أن أتمكن من اللعب من خلال برنامج mainBundle الخاص بي ، أليس كذلك؟

بهذا الرمز:

 NSURL *urlString = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"introvideo" ofType:@"mp4"]]; 
MPMoviePlayerController *player  = [[MPMoviePlayerController alloc] initWithContentURL:urlString];
[player play];

أتلقى رسالة الخطأ هذه: * إنهاء التطبيق بسبب عدم وجود استثناء "NSInvalidArgumentException" ، السبب: "* - [NSURL initFileURLWithPath:]: معلمة سلسلة nil '

أي مساعدة سيكون رائعا!


لقد وضعت دليل "الأصوات" بأكمله في المشروع ، وأضفته إلى قسم "نسخ موارد الحزمة". كانت تعمل بشكل جيد ، ولكن بعد ذلك بدأت في الانهيار.

كان الإصلاح prepend اسم الدليل إلى أسماء الملفات. على سبيل المثال ، لم ينجح ذلك:

SKAction.playSoundFileNamed("crash.caf", waitForCompletion: false)

... لكن هذا نجح :

SKAction.playSoundFileNamed("Sounds/crash.caf", waitForCompletion: false)

يبدو أن pathForResource: ofType: يُرجع صفرًا. تحقق ذلك

  1. تمت إضافة هذا الملف بالفعل إلى مرحلة بناء "نسخ الموارد"؛
  2. لم ترتكب خطأ في اسم الملف - فالمسارات على الجهاز حساسة لحالة الأحرف.

Xcode 9

هنا صورة محدثة.

انتقل إلى إنشاء المراحل> نسخ حزمة الموارد ومعرفة ما إذا كان ملفك موجودًا. إذا لم يكن الأمر كذلك ، فيمكنك إضافته عن طريق الضغط على الزر "+".


هذا يعني أن شفرتك لا تستطيع العثور على ملف introvideo.mp4 الخاص بك. تأكد من قيامك بإضافة هذا الملف بنجاح إلى الحزمة الخاصة بك. يمكنك التحقق من إعداد مشروعك: نسخ حزمة الموارد.


NSURL *url = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"video" ofType:@"mov" inDirectory:@""]];

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
[[player view] setFrame:[self.view bounds]]; // Frame must match parent view
[self.view addSubview:[player view]];
[player play];
[player release];

قصيرة و إلى نقطة تنفيذ. يشير عنوان URL المضمن إلى مجموعة بث صحيحة (بدءًا من 12/15/2015) ، ولكن يمكنك فقط استبدال عنوان URL الخاص بك بملف .m3u8.

ج موضوعية:

#import <MediaPlayer/MediaPlayer.h>
@interface ViewController ()
@property (strong, nonatomic) MPMoviePlayerController *streamPlayer;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *streamURL = [NSURL URLWithString:@"http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8"];

    _streamPlayer = [[MPMoviePlayerController alloc] initWithContentURL:streamURL];

    // depending on your implementation your view may not have it's bounds set here
    // in that case consider calling the following 4 msgs later
    [self.streamPlayer.view setFrame: self.view.bounds];

    self.streamPlayer.controlStyle = MPMovieControlStyleEmbedded;

    [self.view addSubview: self.streamPlayer.view];

    [self.streamPlayer play];
}

- (void)dealloc
{
     // if non-ARC
    // [_streamPlayer release];
    // [super dealloc];
}

@end

سويفت:

import UIKit
import MediaPlayer

class ViewController: UIViewController {

     var streamPlayer : MPMoviePlayerController =  MPMoviePlayerController(contentURL: NSURL(string:"http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8"))

     //Let's play
     override func viewDidLoad() {
         super.viewDidLoad()
         // Do any additional setup after loading the view, typically from a nib.
         streamPlayer.view.frame = self.view.bounds
         self.view.addSubview(streamPlayer.view)

         streamPlayer.fullscreen = true
         // Play the movie!
         streamPlayer.play()
    }

}

إجابة محدثة لكلتا اللغتين. كما تم إيقاف MPMoviePlayerController في نظام التشغيل iOS 9 ، ولكن يمكنك استخدام AVPlayerViewController بدلاً من ذلك. الترميز سعيدة.





ios video mpmovieplayercontroller mp4 mainbundle