เล่นวิดีโอ YouTube ด้วย MPMoviePlayerController แทน UIWebView


89

ฉันกำลังพยายามสตรีมวิดีโอ YouTube โดยใช้ MPMoviePlayerController แต่ฉันมีปัญหาบางอย่าง รหัสที่ฉันใช้นั้นค่อนข้างง่ายและฉันสามารถเล่นวิดีโอ. m4v ได้โดยส่ง URL ไปที่ initWithContentURL เมื่อฉันเปิดโปรแกรมเล่นภาพยนตร์เครื่องเล่นจะปรากฏขึ้น แต่ก็หายไปหลังจากนั้นประมาณ 20 วินาที เมื่อฉันลองในโปรแกรมจำลองฉันได้รับมุมมองการแจ้งเตือนที่ระบุว่าเซิร์ฟเวอร์ไม่ได้กำหนดค่าอย่างถูกต้อง มีข้อโต้แย้งที่ฉันต้องส่งผ่าน URL เพื่อรับฟีดวิดีโอประเภทใดประเภทหนึ่งจาก Google หรือไม่

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 วินาที
jmurphy

คำตอบ:


78

วิธีเดียวที่จะเล่นวิดีโอ youtube ในแอปของคุณเองคือสร้างUIWebViewแท็กฝังจาก Youtube สำหรับภาพยนตร์ที่คุณต้องการเล่นเป็นUIWebView'sเนื้อหา UIWebViewจะตรวจพบว่าวัตถุที่ฝังนั้นเป็นลิงก์ Youtube และเนื้อหาของการดูเว็บจะเป็นตัวอย่าง youtube สำหรับวิดีโอ เมื่อผู้ใช้ของคุณคลิกดูตัวอย่างวิดีโอจะแสดงใน MPMoviePlayerController นี่เป็นเทคนิคที่อธิบายไว้ในลิงก์ที่ Muxecoid ให้ไว้ ( วิธีเล่นวิดีโอ youtube ภายในแอปพลิเคชัน ) และนี่คือ (เท่าที่ฉันรู้) วิธีเดียวที่จะเล่นวิดีโอ youtube ภายในแอปพลิเคชัน คุณยังสามารถเปิดแอปพลิเคชัน Youtube ได้โดยส่ง URL ของ youtube ไป-[UIApplication openURL:]แต่แน่นอนว่านี่เป็นการปิดแอปพลิเคชันของคุณเองซึ่งมักจะไม่เป็นที่ต้องการ

น่าเสียดายที่ไม่มีวิธีเล่นวิดีโอ youtube โดยตรงMPMoviePlayerControllerเนื่องจาก youtube ไม่เปิดเผยลิงก์โดยตรงไปยังไฟล์วิดีโอ


1
ใช่นั่นเป็นวิธีเดียวในการเล่นวิดีโอ YouTube ในแอปของคุณ ใช้เวลา 2 ในการมองหาทางเลือกอื่น คุณภาพก็แย่เหมือนกัน
samvermette

ยังไม่มีวิธีอื่น - หลังจากผ่านไปมากกว่า 2 ปี?
fabb

มีความเป็นไปได้หรือไม่ที่จะได้รับการแจ้งเตือน PlaybackFinishReason และ PlaybackState ในกรณีที่เล่นวิดีโอ youtube แบบฝัง?
Roshit

7
นี่ไม่ใช่วิธีเดียว คุณสามารถรับไฟล์ mp4 จาก Youtube ฉันทำเช่นนั้นในโครงการ AirPlayer Pythonซึ่งช่วยให้คุณเล่นวิดีโอ youtube บน AppleTV ของคุณได้ ฉันจะพอร์ตและใช้ในโปรเจ็กต์ iOS ปัจจุบันของฉันและโพสต์รหัสที่นี่เมื่อพร้อม
hellozimi

7
ขออภัยไม่อนุญาตให้ใช้ลิงก์โดยตรง ส่วน II / 10. ในdeveloper.google.com/youtube/terms : "ไคลเอนต์ API ของคุณจะไม่ [... ] เข้าถึงส่วนใด ๆ ของเนื้อหาภาพและเสียงของ YouTube ด้วยวิธีการอื่นใดนอกจากการใช้โปรแกรมเล่น YouTube หรือเครื่องเล่นวิดีโออื่น ๆ ที่ได้รับอนุญาตอย่างชัดแจ้งจาก YouTube"
Lvsti

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

ดังที่ฉันเขียนไว้ข้างต้นในความคิดเห็นของฉันฉันต้องทำสิ่งนี้ในโครงการที่ฉันกำลังทำอยู่ ฉันได้แก้ไขปัญหานี้และส่งรหัสบน github แล้ว

คุณสามารถตรวจสอบแหล่งที่มาและแยกมันนี่

โดยทั่วไปจะใช้ URL ของ youtube และรับ URL วิดีโอที่เข้ากันได้กับ iOS ทั้งหมด

หวังว่านี่จะเป็นความช่วยเหลือ!
ไชโย


1
ขอบคุณ! BTW การอัปเดตแก้ไขปัญหาเกี่ยวกับการเปลี่ยนแปลงล่าสุดของ YouTube
Peter DeWeese

1
ไม่อนุญาตภายใต้ ToS ของ YouTube โปรดใช้ความเสี่ยงเองเนื่องจากแอปของคุณอาจหยุดทำงานเมื่อใดก็ได้หาก YouTube สังเกตเห็นว่าคุณไม่ได้ปฏิบัติตามข้อกำหนดหรือหาก YouTube เปลี่ยนรหัสฝังที่สร้างขึ้น
Mathew

12

ฉันเพิ่งสะดุดใครบางคนที่สามารถวางYouTubeวิดีโอไว้ในไฟล์MPMoviePlayerController. ตอนนี้ดูเหมือนจะเป็นไปได้

LBYouTubeView


@ ขอบคุณมันทำงานได้ดี แต่เมื่อฉันใช้ [mpplayer stop]; เพื่อหยุดวิดีโอนี้แสดงว่าวิดีโอกำลังทำงานอยู่ แต่ฉันต้องการหยุดวิดีโอ
Jaspreet Singh

ลิงก์ github เล่นเสียงในพื้นหลังด้วยหรือไม่
Khalid Usman

2

การเล่นที่คุณวิดีโอหลอดคุณต้องแยก URL ก่อนที่จะผ่าน URL MPMoviePlayerลง คุณไม่สามารถเล่นได้โดยตรง

github repo ของฉันมีการสาธิตการใช้งานนี้

ดู:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

ลองใช้วิธีนี้ทำให้สามารถโหลดและเล่นวิดีโอ youtube ได้โดยตรงMPMoviePlayerเหมือนกับวิดีโออื่น ๆ และเป็นแนวทางที่ดีเช่นกัน

แก้ไข: ตรวจสอบให้แน่ใจว่าคุณผ่าน Readme.md ให้ดีก่อนที่จะใช้สิ่งนี้ในโครงการของคุณ


2
น่าเสียดายที่ต่อต้าน ToS ของ YouTube หากคุณทำเช่นนี้คุณสามารถคาดหวังให้แอปของคุณทำงานได้ตราบเท่าที่ YouTube ไม่รู้ว่าคุณกำลังทำอะไรอยู่
Mathew

ฉันได้ส่งอีเมลถึงพวก API ของ YouTube ในขณะที่ถามกลับว่าฉันจะแยกวิเคราะห์ URL ของวิดีโอด้วยตัวเองได้หรือไม่ นี่คือคำพูดจากคำตอบที่ฉันได้รับ: "กลไกเดียวที่ได้รับการสนับสนุนคือการฝัง iframe การเข้าถึงสตรีมดิบไม่ได้รับการสนับสนุนจาก ToS ของเรานอกเหนือจากสตรีม RTSP ความละเอียดต่ำที่เรามีให้สำหรับฟีเจอร์โฟน"
Mathew

1
คุณทำให้ฉันเชื่อมั่นในจุดลงคะแนน ฉันยอมรับว่าควรเป็นเครื่องมือในการระบุความไม่ถูกต้องและการเพิ่มคะแนนก็เพียงพอที่จะแสดงให้เห็นว่าคำตอบใดที่ฉันคิดว่าเกี่ยวข้องกับผู้ที่พยายามแก้ปัญหาการฝัง YouTube มากที่สุด Damnit เห็นได้ชัดว่า StackOverflow ล็อคการลงคะแนนของฉันและฉันไม่สามารถลบออกได้อีกต่อไปเว้นแต่คำตอบของคุณจะได้รับการแก้ไข
Mathew

เยี่ยมมาก! ฉันสามารถแก้ไขและขอให้คุณลบการโหวตลงคะแนนได้แล้ว! ... แต่ ... ไม่ต้อง.. เอาไปเลย!
DD_

@Mathew แอป iOS ที่ถูกกฎหมายจำนวนมากกำลังทำสิ่งนี้ (ข้าม API ของ YouTube) และแม้ว่าจะละเมิดข้อกำหนดในการให้บริการตามที่คุณได้ชี้ไป แต่ Google ก็ไม่ได้ใส่ใจในหลาย ๆ กรณีเนื่องจากอนุญาตให้ผลิตภัณฑ์ของตนเข้าถึงได้ ผู้ชมมากขึ้น
rmp251

1

ทำได้ง่ายเพียงแค่ใช้องค์ประกอบ src ของ iframe สำหรับโค้ดฝังใหม่และการโทร

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


0

มีวิธีอย่างเป็นทางการในการฝังวิดีโอ YouTube ในแอปพลิเคชัน iOS ซึ่งให้บริการโดย Google

ติดตั้งไลบรารีผ่าน cocoapods: pod "youtube-ios-player-helper"

นำเข้าโดย: #import “YTPlayerView.h” ใช้UIViewและตั้งค่าคลาสเป็นYTPlayerViewหรือสร้างวัตถุของทางYTPlayerViewโปรแกรม

โหลดวิดีโอ: [self.playerView loadWithVideoId:@"M7lc1UVf-VE"];

นอกจากนี้ยังมีplayVideoและstopVideoวิธีการ สำหรับข้อมูลเพิ่มเติมโปรดไปที่ ลิงค์นี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.