youtube-ios-player-helper
เป็นไลบรารีแบบโอเพนซอร์สซึ่งช่วยให้คุณฝังโปรแกรมเล่น iframe ของ YouTube ลงในแอปพลิเคชัน iOS ได้ ไลบรารีจะสร้าง WebView
และบริดจ์ระหว่างโค้ด Objective-C ของแอปพลิเคชันกับโค้ด JavaScript ในโปรแกรมเล่นของ YouTube ซึ่งช่วยให้แอปพลิเคชัน iOS ควบคุมโปรแกรมเล่น YouTube ได้ บทความนี้อธิบายถึงขั้นตอนการติดตั้งไลบรารีและเริ่มต้นใช้งานจากแอปพลิเคชัน iOS
การติดตั้ง
บทความนี้จะถือว่าคุณได้สร้างโปรเจ็กต์ iOS แอปพลิเคชันแบบมุมมองเดียวที่กําหนดเป้าหมายเป็น iOS เวอร์ชันล่าสุด และคุณได้เพิ่มไฟล์ต่อไปนี้เมื่อสร้างโปรเจ็กต์
Main.storyboard
ViewController.h
ViewController.m
คุณติดตั้งไลบรารีผ่าน CocoaPods หรือคัดลอกไฟล์ไลบรารีและไฟล์แหล่งที่มาจากหน้า GitHub ของโปรเจ็กต์ได้
- ไลบรารีสามารถติดตั้งผ่าน CocoaPods ได้ อีกทางเลือกหนึ่งคือไลบรารีไฟล์และไฟล์ต้นทางจะพร้อมให้บริการผ่านหน้า GitHub ของโปรเจ็กต์และคัดลอกลงในโปรเจ็กต์ที่มีอยู่ได้
ติดตั้งไลบรารีผ่าน CocoaPods
หากโปรเจ็กต์ใช้ CocoaPods ให้เพิ่มบรรทัดด้านล่างใน Podfile เพื่อติดตั้งไลบรารี
ในบรรทัดดังกล่าว ให้แทนที่ x.y.z
ด้วยเวอร์ชันล่าสุดของพ็อด ซึ่งจะระบุไว้ในหน้า GitHub ของโปรเจ็กต์
pod "youtube-ios-player-helper", "~> x.y.z"
เมื่อมีข้อความแจ้งบรรทัดคําสั่ง ให้พิมพ์ pod install
เพื่ออัปเดตพื้นที่ทํางานด้วยทรัพยากร Dependency
เคล็ดลับ: โปรดทราบว่าเมื่อใช้ CocoaPods คุณต้องเปิดไฟล์ .xcworkspace
ใน Xcode ไม่ใช่ไฟล์ .xcodeproj
ดูข้อมูลเพิ่มเติมได้ที่บทแนะนําของ CocoaPods
ติดตั้งไลบรารีด้วยตนเอง
หากต้องการติดตั้งไลบรารีผู้ช่วยด้วยตนเอง ให้ดาวน์โหลดแหล่งข้อมูลผ่านลิงก์ดาวน์โหลดของ GitHub หรือโคลนที่เก็บ เมื่อคุณมีสําเนาของโค้ดในเครื่องแล้ว ให้ทําตามขั้นตอนต่อไปนี้
เปิดโปรเจ็กต์ตัวอย่างใน Xcode หรือ Finder
เลือก
YTPlayerView.h
,YTPlayerView.m
และโฟลเดอร์ชิ้นงาน หากคุณเปิดพื้นที่ทํางานใน Xcode ฟังก์ชันเหล่านี้จะอยู่ในพ็อด -> พ็อดการพัฒนา -> YouTube-Player-iOS-Helper และพ็อด -> พ็อดการพัฒนา -> YouTube-Player-iOS-Helper -> ทรัพยากร ใน Finder รายการเหล่านี้จะมีอยู่ในไดเรกทอรีรากของโปรเจ็กต์ในไดเรกทอรีชั้นเรียนและเนื้อหาลากไฟล์และโฟลเดอร์เหล่านี้ลงในโครงการ ตรวจสอบว่าได้เลือกตัวเลือกคัดลอกรายการไปยังโฟลเดอร์ของกลุ่มปลายทางแล้ว เมื่อลากโฟลเดอร์ชิ้นงาน โปรดตรวจสอบว่าได้เลือกตัวเลือกสร้างการอ้างอิงโฟลเดอร์สําหรับโฟลเดอร์ที่เพิ่มแล้ว
ตอนนี้ควรติดตั้งไลบรารีแล้ว
เพิ่ม YTPlayerView
ผ่านเครื่องมือสร้างอินเทอร์เฟซหรือสตอรีบอร์ด
วิธีเพิ่ม YTPlayerView
ผ่านเครื่องมือสร้างอินเทอร์เฟซหรือสตอรีบอร์ด
-
ลากอินสแตนซ์
UIView
ไปไว้ในมุมมอง -
เลือกเครื่องมือตรวจสอบข้อมูลประจําตัวและเปลี่ยนคลาสของมุมมองเป็น
YTPlayerView
-
เปิด
ViewController.h
และเพิ่มส่วนหัวต่อไปนี้#import “YTPlayerView.h”
และเพิ่มพร็อพเพอร์ตี้ต่อไปนี้ด้วย
@property(nonatomic, strong) IBOutlet YTPlayerView *playerView;
-
ในเครื่องมือสร้างอินเทอร์เฟซ ให้สร้างการเชื่อมต่อจากองค์ประกอบข้อมูลพร็อพเพอร์ตี้ที่คุณกําหนดในขั้นตอนก่อนหน้าไปยังพร็อพเพอร์ตี้
playerView
ของตัวควบคุมการดู -
ตอนนี้ให้เปิด
ViewController.m
แล้วเพิ่มโค้ดต่อไปนี้ที่ส่วนท้ายของเมธอดviewDidLoad
[self.playerView loadWithVideoId:@"M7lc1UVf-VE"];
สร้างและเรียกใช้แอปพลิเคชัน เมื่อภาพปกวิดีโอโหลดขึ้นมา ให้แตะที่ภาพปกวิดีโอเพื่อเปิดโปรแกรมเล่นวิดีโอแบบเต็มหน้าจอ
ควบคุมการเล่นวิดีโอ
เมธอด ViewController::loadWithVideoId:
มีตัวแปร loadWithVideoId:playerVars:
ที่ช่วยให้นักพัฒนาซอฟต์แวร์ส่งตัวแปรโปรแกรมเล่นเพิ่มเติมไปยังข้อมูลพร็อพเพอร์ตี้ได้ ตัวแปรโปรแกรมเล่นเหล่านี้สอดคล้องกับพารามิเตอร์โปรแกรมเล่นใน IFrame Player API พารามิเตอร์ playsinline
ช่วยให้วิดีโอเล่นในมุมมองได้โดยตรงแทนการเล่นแบบเต็มหน้าจอ เมื่อวิดีโอกําลังเล่นในบรรทัด แอปพลิเคชันใน iOS จะควบคุมการเล่นแบบเป็นโปรแกรมได้
แทนที่การเรียกใช้ loadWithVideoId:
ด้วยรหัสนี้
NSDictionary *playerVars = @{ @"playsinline" : @1, }; [self.playerView loadWithVideoId:@"M7lc1UVf-VE" playerVars:playerVars];
เปิดสตอรีบอร์ดหรือเครื่องมือสร้างอินเทอร์เฟซ ลากปุ่ม 2 ปุ่มมายังมุมมอง โดยติดป้ายกํากับว่าเล่นและหยุด เปิด ViewController.h
และเพิ่มวิธีการเหล่านี้ซึ่งจะแมปกับปุ่ม
- (IBAction)playVideo:(id)sender; - (IBAction)stopVideo:(id)sender;
ตอนนี้ ให้เปิด ViewController.m
และกําหนด 2 ฟังก์ชันต่อไปนี้
- (IBAction)playVideo:(id)sender { [self.playerView playVideo]; } - (IBAction)stopVideo:(id)sender { [self.playerView stopVideo]; }
ฟังก์ชัน IFrame Player API ส่วนใหญ่มี Objective-C ที่เทียบเท่า แม้ว่าชื่อบางชื่ออาจแตกต่างกันเล็กน้อยเพื่อให้สอดคล้องกับหลักเกณฑ์การเขียนโค้ด Objective-C มากขึ้น ข้อยกเว้นที่สําคัญคือวิธีการควบคุมระดับเสียงของวิดีโอ เนื่องจากฮาร์ดแวร์เหล่านี้ควบคุมโดยฮาร์ดแวร์โทรศัพท์หรืออินสแตนซ์ UIView
ในตัวที่ออกแบบมาเพื่อวัตถุประสงค์นี้ เช่น MPVolumeView
เปิดสตอรีบอร์ดหรือเครื่องมือสร้างอินเทอร์เฟซแล้วลากตัวควบคุมเพื่อเชื่อมต่อปุ่มเล่นและหยุดกับเมธอด playVideo:
และ stopVideo:
สร้างและเรียกใช้แอปพลิเคชันเลย เมื่อภาพขนาดย่อของวิดีโอโหลดแล้ว คุณควรจะสามารถเล่นและหยุดวิดีโอโดยใช้ตัวควบคุมโฆษณาเนทีฟได้นอกเหนือจากตัวควบคุมโปรแกรมเล่น
จัดการโค้ดเรียกกลับของผู้เล่น
ซึ่งมีประโยชน์ในการจัดการเหตุการณ์การเล่นแบบเป็นโปรแกรม เช่น การเปลี่ยนแปลงสถานะการเล่นและข้อผิดพลาดในการเล่น ใน JavaScript API คุณจะดําเนินการได้ด้วยตัวฟังเหตุการณ์ ใน Objective-C ขั้นตอนนี้ทําด้วยการมอบสิทธิ์
โค้ดต่อไปนี้แสดงวิธีอัปเดตการประกาศอินเทอร์เฟซใน ViewController.h
เพื่อให้ชั้นเรียนสอดคล้องกับโปรโตคอลที่ได้รับมอบสิทธิ์ เปลี่ยนการประกาศอินเทอร์เฟซของ ViewController.h
ดังนี้
@interface ViewController : UIViewController<YTPlayerViewDelegate>
YTPlayerViewDelegate
เป็นโปรโตคอลสําหรับจัดการเหตุการณ์การเล่นในโปรแกรมเล่น
หากต้องการอัปเดต ViewController.m
เพื่อจัดการเหตุการณ์บางรายการ คุณต้องตั้งค่าอินสแตนซ์ ViewController
เป็นผู้รับมอบสิทธิ์ของอินสแตนซ์ YTPlayerView
ก่อน หากต้องการเปลี่ยนแปลง ให้เพิ่มบรรทัดต่อไปนี้ลงในเมธอด viewDidLoad
ใน ViewController.h
self.playerView.delegate = self;
เพิ่มเมธอดต่อไปนี้ลงใน ViewController.m
แล้ว
- (void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state { switch (state) { case kYTPlayerStatePlaying: NSLog(@"Started playback"); break; case kYTPlayerStatePaused: NSLog(@"Paused playback"); break; default: break; } }
สร้างและเรียกใช้แอปพลิเคชัน ดูเอาต์พุตบันทึกใน Xcode เมื่อสถานะโปรแกรมเล่นเปลี่ยนแปลง คุณควรเห็นการอัปเดตเมื่อวิดีโอเล่นหรือหยุดเล่น
ไลบรารีจะมีค่าคงที่ที่ขึ้นต้นด้วยคํานําหน้า kYT*
เพื่อความสะดวกและความอ่านได้ง่าย ดูรายการค่าคงที่ทั้งหมดได้ที่ YTPlayerView.m
แนวทางปฏิบัติแนะนําและข้อจํากัด
ไลบรารีสร้างขึ้นจาก IFrame Player API ด้วยการสร้าง WebView
และแสดงผล HTML และ JavaScript ที่จําเป็นสําหรับโปรแกรมเล่นพื้นฐาน เป้าหมายของไลบรารีก็คือ
การใช้วิธีการรวมให้มากที่สุดที่นักพัฒนาซอฟต์แวร์ต้องเขียนลงในแพ็กเกจบ่อยครั้ง มีข้อจํากัดบางประการที่ควรทราบ
- ไลบรารีไม่รองรับการเล่นวิดีโอพร้อมกันใน
YTPlayerView
อินสแตนซ์หลายรายการ หากแอปพลิเคชันของคุณมีอินสแตนซ์YTPlayerView
หลายรายการ แนวทางปฏิบัติแนะนําคือหยุดชั่วคราวหรือหยุดการเล่นในอินสแตนซ์ที่มีอยู่ก่อนเริ่มเล่นในอินสแตนซ์อื่น ในแอปพลิเคชันตัวอย่างที่จัดส่งด้วยโปรเจ็กต์ ViewController จะใช้NSNotificationCenter
เพื่อส่งการแจ้งเตือนว่าการเล่นใกล้จะเริ่มขึ้น ตัวควบคุม View อื่นๆ จะได้รับการแจ้งเตือนและจะหยุดเล่นชั่วคราวในอินสแตนซ์YTPlayerView
ของตน - นําอินสแตนซ์
YTPlayerView
รายการที่มีอยู่มาใช้ซ้ํา หากเป็นไปได้ เมื่อจําเป็นต้องเปลี่ยนวิดีโอในข้อมูลพร็อพเพอร์ตี้ อย่าสร้างอินสแตนซ์UIView
ใหม่หรืออินสแตนซ์YTPlayerView
ใหม่ และอย่าเรียกloadVideoId:
หรือloadPlaylistId:
แต่ให้ใช้กลุ่มฟังก์ชันcueVideoById:startSeconds:
แทน ซึ่งจะไม่โหลดWebView
ซ้ํา เกิดความล่าช้าอย่างมากเมื่อโหลดโปรแกรมเล่น iframe ทั้งหมด - โปรแกรมเล่นนี้ไม่สามารถเล่นวิดีโอส่วนตัว แต่จะเล่นวิดีโอที่ไม่เป็นสาธารณะได้ เนื่องจากไลบรารีนี้รวมโปรแกรมเล่น iframe ที่มีอยู่ ลักษณะการทํางานของโปรแกรมเล่นจึงน่าจะเกือบเหมือนกับของโปรแกรมเล่นที่ฝังอยู่ในหน้าเว็บในเบราว์เซอร์บนอุปกรณ์เคลื่อนที่
การมีส่วนร่วม
เนื่องจากคุณเป็นโปรเจ็กต์โอเพนซอร์ส โปรดส่งการแก้ไขและการปรับปรุงไปยังสาขาหลักของโปรเจ็กต์ GitHub