UIWebView के बजाय MPMoviePlayerController के साथ YouTube वीडियो चलाएं


89

मैं MPMoviePlayerController का उपयोग करके कुछ youTube वीडियो स्ट्रीम करने का प्रयास कर रहा हूं, लेकिन मुझे कुछ समस्याएं हो रही हैं। मैं जिस कोड का उपयोग कर रहा हूं वह बहुत सरल है और मैं एक URL initWithContentURL पास करके .m4v वीडियो चला सकता हूं। जब मैं मूवी प्लेयर लॉन्च करता हूं तो खिलाड़ी आता है लेकिन लगभग 20 सेकंड के बाद बस चला जाता है। जब मैं इसे सिम्युलेटर में आज़माता हूं तो मुझे एक अलर्ट दृश्य मिलता है जो कहता है कि सर्वर सही तरीके से कॉन्फ़िगर नहीं किया गया है। क्या एक तर्क है कि मुझे Google से एक विशिष्ट प्रकार की वीडियो फ़ीड प्राप्त करने के लिए URL के साथ पास करने की आवश्यकता है?

NSURL *videoURL = [NSURL URLWithString:@"http://www.youtube.com/v/HGd9qAfpZio&hl=en_US&fs=1&"];
MPMoviePlayerController *moviePlayer;
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];

[moviePlayer play];

मैंने निम्नलिखित URL की http://www.youtube.com/watch?v=HGd9qAfpZio कोशिश की है

मैंने तर्क और प्रारूप = 1 को भी देखा है और दोनों तारों के अंत में इसे जोड़ने की कोशिश की है लेकिन भाग्य नहीं।


मुझे कुछ और जानकारी मिली लेकिन यह अभी भी काम नहीं कर रही है। किसी व्यक्ति ने URL के लिए इसका उपयोग करने का सुझाव दिया है: youtube.com/get_video?video_id=ID&t=SIGNATURE&fmt=18 मैंने अपनी वीडियो आईडी डाली, लेकिन मुझे नहीं पता कि हस्ताक्षर क्या है? और वीडियो प्लेयर अभी भी वही व्यवहार करता है। यह खिलाड़ी को खोलता है फिर 10 से 20 सेकंड के बाद बंद हो जाता है।
जम्फर्फी

जवाबों:


78

अपने खुद के ऐप के अंदर एक यूट्यूब वीडियो प्ले करने का एकमात्र तरीका यह है कि जिस UIWebViewमूवी के लिए आप UIWebView'sसामग्री के रूप में खेलना चाहते हैं, उसके लिए Youtube से एम्बेड टैग के साथ बनाएं । UIWebViewयह पता लगाएगा कि एम्बेडेड ऑब्जेक्ट एक Youtube लिंक है, और वेब दृश्य की सामग्री वीडियो के लिए YouTube पूर्वावलोकन होगी। जब आपका उपयोगकर्ता पूर्वावलोकन क्लिक करता है, तो वीडियो एक MPMoviePlayerController में दिखाया जाएगा। यह उस लिंक पर वर्णित तकनीक है जिसे Muxecoid ने प्रदान किया है ( किसी एप्लिकेशन के भीतर यूट्यूब वीडियो कैसे चलाएं ), और यह (जहां तक ​​मुझे पता है) एक आवेदन के भीतर एक यूट्यूब वीडियो प्ले करने का एकमात्र तरीका है। आप अभी भी YouTube एप्लिकेशन को YouTube URL को पास करके लॉन्च कर सकते हैं -[UIApplication openURL:], लेकिन निश्चित रूप से यह आपके स्वयं के एप्लिकेशन को बंद कर देता है जो अक्सर अवांछनीय होता है।

दुर्भाग्य से, यूट्यूब वीडियो को सीधे खेलने का कोई तरीका नहीं है MPMoviePlayerControllerक्योंकि यूट्यूब वीडियो फ़ाइलों के सीधे लिंक को उजागर नहीं करता है।


1
हाँ, यह आपके ऐप में YouTube वीडियो चलाने का एकमात्र तरीका है। 2 विकल्प की तलाश में खर्च किए। गुणवत्ता थोड़े खराब है, भी।
samvermette

क्या अभी भी कोई दूसरा तरीका नहीं है - 2 से अधिक वर्षों के बाद?
फेब

क्या YouTube वीडियो को एम्बेड किए जाने के मामले में PlaybackFinishReason और PlaybackState सूचनाएं प्राप्त करने की संभावना है?
रोशिट

7
यह एकमात्र तरीका नहीं है। आप mp4 फ़ाइल Youtube से प्राप्त कर सकते हैं। मैं अपने AirPlayer Python Project में ऐसा करता हूं , जो आपको अपने AppleTV पर यूट्यूब वीडियो चलाने में सक्षम बनाता है। मैं इसे पोर्ट करूंगा और अपने वर्तमान iOS प्रोजेक्ट में इसका उपयोग करूंगा और जब यह तैयार हो जाए तो यहां कोड पोस्ट कर दूंगा।
हेल्लोमी

7
दुर्भाग्य से एक सीधा लिंक का उपयोग करना निषिद्ध है। धारा II / 10। में developers.google.com/youtube/terms : "आपका API क्लाइंट नहीं होगा [...] का उपयोग किसी भी एक यूट्यूब खिलाड़ी या स्पष्ट रूप से यूट्यूब द्वारा अधिकृत अन्य वीडियो प्लेयर के उपयोग के अलावा अन्य तरह से किसी भी यूट्यूब दृश्य-श्रव्य सामग्री के किसी भी हिस्से,"
20

26

यदि आप कोड का उपयोग कर रहे हैं:

- (void)embedYouTube:(NSString*)url frame:(CGRect)frame {  
     NSString* embedHTML = @"\ 
        <html><head>\ 
     <style type=\"text/css\">\ 
     body {\ 
     background-color: transparent;\ 
     color: white;\ 
    }\ 
   </style>\ 
    </head><body style=\"margin:0\">\ 
       <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \ 
    width=\"%0.0f\" height=\"%0.0f\"></embed>\ 
       </body></html>";  
   NSString* html = [NSString stringWithFormat:embedHTML, url, frame.size.width, frame.size.height];  
   if(videoView == nil) {  
      videoView = [[UIWebView alloc] initWithFrame:frame];  
     [self.view addSubview:videoView];  
    }  
    [videoView loadHTMLString:html baseURL:nil];  
  }

स्रोत:

बस इस लिंक को देखें

सुनिश्चित करें कि आप इसे डिवाइस पर परीक्षण करते हैं न कि सिम्युलेटर पर। चूंकि सिम्युलेटर हमेशा नीले बॉक्स के साथ प्रश्न चिह्न प्रदर्शित करेगा (इसमें क्विक-टाइम प्लेयर नहीं है)।


23

जैसा कि मैंने अपनी टिप्पणी में ऊपर लिखा था कि मुझे उस परियोजना में ऐसा करना था जिस पर मैं काम कर रहा था। मैंने इस समस्या को हल कर लिया है और जीथब पर कोड जमा कर दिया है।

आप स्रोत की जांच कर सकते हैं और इसे यहां फोर्क कर सकते हैं

यह मूल रूप से एक youtube url लेता है और सभी iOS संगत वीडियो url प्राप्त करता है।

आशा है कि यह किसी भी मदद के लिए है!
चियर्स


1
धन्यवाद! BTW, अपडेट ने हाल के YouTube परिवर्तनों के साथ समस्या को ठीक किया।
पीटर देवेसे

1
YouTube के ToS के तहत इसकी अनुमति नहीं है। इसे अपने जोखिम पर उपयोग करें, क्योंकि आपका ऐप किसी भी बिंदु पर काम करना बंद कर सकता है यदि YouTube नोटिस करता है कि आप ToS का अनुसरण नहीं कर रहे हैं या यदि YouTube एम्बेड कोड को परिवर्तित करता है तो यह उत्पन्न करता है।
मैथ्यू

13

मैं बस किसी ऐसे व्यक्ति को देखता हूं जो किसी YouTubeवीडियो को अंदर रखने में सक्षम था MPMoviePlayerController। यह अब संभव दिखाई देता है।

LBYouTubeView


@ अपने काम ठीक है, लेकिन जब मैं [mpplayer रोक] का उपयोग करें; इस वीडियो को रोकने के लिए फिर वीडियो चल रहा है। लेकिन मैं वीडियो को रोकना चाहता हूं
जसप्रीत सिंह

क्या जीथब लिंक भी पृष्ठभूमि में ऑडियो चलाएगा?
खालिद उस्मान

2

ट्यूब वीडियो चलाने के लिए आपको url को पास करने से पहले url निकालना होगा MPMoviePlayer। आप इसे सीधे नहीं खेल सकते।

मेरे गितुब रेपो में इसका डेमो कार्यान्वयन है।

देख:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

यह कोशिश करो, यह MPMoviePlayerकिसी भी अन्य वीडियो की तरह सीधे यूट्यूब वीडियो को लोड और प्ले करना संभव बनाता है और बहुत अच्छा दृष्टिकोण भी है।

संपादित करें: सुनिश्चित करें कि आप अपने प्रोजेक्ट में इसे उपयोग करने से पहले Readme.md से गुजरते हैं


2
YouTube के ToS के खिलाफ, दुर्भाग्य से। यदि आप ऐसा करते हैं, तो आप केवल अपने ऐप से काम करने की उम्मीद कर सकते हैं जब तक कि YouTube इस बात से अनजान हो कि आप क्या कर रहे हैं।
मैथ्यू

मैंने YouTube API लोगों को कुछ समय पहले ईमेल किया था कि क्या यह पूछना मेरे लिए ठीक होगा कि वीडियो URL को स्वयं पार्स करना; यह मेरे द्वारा दिए गए उत्तर में से एक उद्धरण है: "समर्थित एकमात्र तंत्र iframe एम्बेड है। हमारे स्ट्रीम द्वारा रॉस एक्सेस का समर्थन नहीं किया गया है जो कि कम रेस आरटीएसपी धाराओं के अलावा हम फीचर फोन के लिए प्रदान करते हैं"
मैथ्यू

1
आपने मुझे नीच बिंदु पर आश्वस्त किया है; मैं सहमत हूं कि यह गलत को चिह्नित करने के लिए एक उपकरण होना चाहिए, और यह कि upvoting यह दिखाने के लिए पर्याप्त है कि मुझे लगता है कि इनमें से कौन सा उत्तर YouTube एम्बेड समस्या को हल करने की कोशिश कर रहे लोगों के लिए सबसे अधिक प्रासंगिक है। डेमनिट, स्पष्ट रूप से स्टैकऑवरफ्लो मेरे डाउनवोट को लॉक कर देता है और जब तक आपका जवाब संपादित नहीं किया जाता मैं इसे हटा नहीं सकता।
मैथ्यू

महान! मैं एक संपादन कर सकता हूं और आपसे अनुरोध कर सकता हूं कि आप अपना डाउनवोट हटा दें! ... लेकिन ... कोई जरूरत नहीं है..इसलिए वहाँ रहो!
DD_

@ मैथ्यू बहुत सारे कानूनी आईओएस ऐप इस तरह का काम कर रहे हैं (यूट्यूब के एपीआई को दरकिनार करते हुए) और यद्यपि यह टीओएस का उल्लंघन करता है जैसा कि आप इंगित कर रहे हैं, Google को कई मामलों में यह प्रतीत नहीं होता है क्योंकि यह उनके उत्पाद तक पहुंचने की अनुमति देता है। अधिक दर्शक।
rmp251

1

यह नया एम्बेड कोड और कॉलिंग के लिए iframe का src तत्व लेने जितना आसान है

[self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];


0

IOS एप्लिकेशन में YouTube वीडियो एम्बेड करने का एक आधिकारिक तरीका है जो Google द्वारा प्रदान किया गया है।

कोको के माध्यम से पुस्तकालय स्थापित करें: फली "youtube-ios-player-helper"

आयात द्वारा: प्रोग्राम का #import “YTPlayerView.h” उपयोग करें UIViewया सेट करें YTPlayerViewया YTPlayerViewप्रोग्रामेटिक रूप से ऑब्जेक्ट बनाएँ ।

वीडियो लोड करें: [self.playerView loadWithVideoId:@"M7lc1UVf-VE"];

वहाँ भी है playVideoऔर stopVideoतरीके उपलब्ध हैं। अधिक जानकारी के लिए इस लिंक पर जाएँ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.