発表イベント : CA.swift #15 WWDC21報告会 https://cyberagent.connpass.com/event/215215/
WWDC21で発表されたSharePlayを実際に試してみました。
ݕূ SharePlay media playback2021/07/14ߦ ઍय़ Streaming Client Team, גࣜձࣾAbemaTV@RidwyCA.swift #15 WWDC21ใࠂձ※ ެ։༻ʹൃද࣌ͷεϥΠυ͔ΒЌ൛OSͷεΫϦʔϯγϣοτಈըΛऔΓআ͍ͨΓ΅͔ͨ͠Γͨ͠όʔδϣϯͰ͢ɻΠϕϯτࢀՃऀͷํݶఆެ։ͷURL͔ΒൃදಈըΛ͝ཡʹͳΕ·͢ͷͰ߹Θͤͯ͝׆༻͍ͩ͘͞ɻ
View Slide
SharePlayͱ• FaceTime௨தʹΕͨ૬खͱಉ͡ମݧΛڞ༗Ͱ͖Δػೳ• ಈըɾԻָɾΞϓϦಠࣗͷମݧ • iOS 15, tvOS 15, macOS 12Ҏ߱• Safari 15Ҏ߱shareplay SF symbol
Social-ViewingCo-ViewingՈ༑ਓͰөըεϙʔπ؍ઓͳͲΛָ͠ΉମݧΕ͍ͯͯҰॹʂSharePlay͜ΕΛFaceTime্Ͱ࣮ݱ͢Δ
SharePlay media playbackIS NOT࠶৴ ίϯςϯπࣗମ͜Ε·Ͱ௨Γ֤αʔϏεͷΈͰ৴࠶ੜλΠϛϯάΛίϯτϩʔϧ
Έ
GroupActivities API
GroupActivities APIFaceTime։࢝ʂFaceTime௨
GroupActivityڞ༗͢ΔମݧGroupActivities API࡞FaceTime௨
GroupActivityڞ༗͢ΔମݧGroupActivities APIactivate()FaceTime௨
GroupActivityڞ༗͢ΔମݧGroupActivities APIGroupSessionFaceTime௨
GroupActivityڞ༗͢ΔମݧGroupActivities APIGroupSessionFaceTime௨join() join() join()
࠶ੜλΠϛϯάͷಉظAVPlaybackCoordinatorAppleެࣜαϯϓϧίʔυ Supporting Coordinated Media Playback ͷυΩϡϝϯτΑΓGroupSessionΛ௨ͯ͡Coordinator͕࠶ੜɾఀࢭɾγʔΫͳͲͷΠϕϯτΛΓͱΓ
ͬ͘͟Γݴ͏ͱશһͷ࠶ੜ४උ͕ग़དྷͨΒʮͤʔͷʂʯͰ։࢝͢Δ࠶ੜλΠϛϯάͷಉظAVPlaybackCoordinator
ͬ͘͟Γݴ͏ͱશһͷ࠶ੜ४උ͕ग़དྷͨΒʮͤʔͷʂʯͰ։࢝͢ΔAVPlaybackCoordinator࠶ੜλΠϛϯάͷಉظ
HTTP Live StreamingΛಉظ͢ΔʹAVPlaybackCoordinatorϓϨΠϦετʹEXT-X-PROGRAM-DATE-TIMEλάΛهड़#EXT-X-PROGRAM-DATE-TIME:࣍ͷηάϝϯτͷઌ಄Λઈର࣌ࠁͱ݁ͼ͚ͭΔ
Coding…
struct Movie: Hashable, Codable {var url: URLvar title: String}struct WatchingActivity: GroupActivity {let movie: Movievar metadata: GroupActivityMetadata {var metadata = GroupActivityMetadata()metadata.type = .watchTogethermetadata.fallbackURL = movie.urlmetadata.title = movie.titlereturn metadata}}ActivityΛఆٛGroupActivityϓϩτίϧʹ४ڌͤ͞ΔGroupActivityCodableΛܧঝactivate࣌ʹencode, decodeͯ͠ࢀՃऀʹಧ͚ΒΕΔϝλσʔλΧʔυͳͲʹදࣔ͞ΕΔSafariͰfallbackURL͕։͔ΕΔଞʹ.listenTogether, .generic͕͋Δ
࠶ੜϘλϯͷॲཧlet activity = WatchingActivity(movie: movie)switch await activity.prepareForActivation() {case .activationDisabled:// SharePlayՄೳͰͳ͍߹͙͢͜͜ʹདྷΔcase .activationPreferred:activity.activate()case .cancelled:break default: ()}
Sessionͷ։࢝Λࢹͯ͠Joinfor await session in WatchingActivity.sessions() {// ࠶ੜUIͷηοτΞοϓΛߦ͏// CoordinatorΛSessionʹ݁ͼ͚ͭΔplayer.playbackCoordinator.coordinateWithSession(session)session.join()}ಉظͷͨΊͷίʔυ͜Ε͚ͩ
ΞϓϦಠࣗͷମݧΛγΣΞ͢Δ߹GroupSessionMessenger• ΓͱΓ͢ΔΠϕϯτΛఆٛ• GroupSessionMessengerΛར༻ͯ͠SessionʹΠϕϯτΛpost
ରԠ༧ఆͷαʔϏεWWDC21 KeynoteΑΓ
͍Ζ͍Ζࢼͯ͠Έ·͠ΐ͏
ΞϓϦΛ͍࣋ͬͯͳ͔ͬͨΒʁ• ࢀՃϘλϯ͕App StoreͷಋઢʹͳΔ• ༑ୡ͕͍ͬͯΔͷͰͰ͖Δ͚ͩૣ͘ࢹௌͰ͖ΔΑ͏ʹUXΛઃܭ
ඇରԠσόΠε(iOS 15ະຬͷiPhoneͳͲ)ͷϝϯόʔ͕͍ͨΒʁ• ରԠσόΠεؒͰSharePlay͕Մೳ• ඇରԠσόΠεͰͳʹى͖ͳ͍iOS 15 β2ͰݕূiOS 14.6iOS 15FaceTime͠ͳ͕ΒSharePlayͰಈըࢹௌத
ࣈນԻʁ• ͋͘·Ͱௐ͞ΕΔͷ࠶ੜλΠϛϯά• ֤͕ࣗͦΕͧΕ͖͢ͳࣈນԻΛબՄೳυʔφοπͷ݀ʹ͍ͭͯAbout donut hole
ࠂ͋Γɾͳ͠ͷϓϥϯͷϢʔβ͕ࠞࡏ͍ͯͨ͠ΒͲ͏͢Δ͖ʁ• ύʔιφϥΠζ͞ΕͨࠂϝΠϯͷίϯςϯπͷಉظʹӨڹ͠ͳ͍Α͏ʹผͷϓϨΠϠʔͰ࠶ੜ• ࠂ͕ऴΘͬͨΒ࠶߹ྲྀ• AVPlayerInterstitialEvent API(iOS 15+)͕ར༻ՄೳAdࠂ͋Γࠂͳ͠
ಉظͷਫ਼ʁ• ίϯτϩʔϧΠϕϯτͷΓͱΓʹؾʹͳΔ΄ͲͷԆͳ͍ ʢϦϦʔεޙͲ͏͔ʁʣ• ίϯςϯπͷಉظͷਫ਼αʔϏεͷ࣮ʹΑΔ • ݕূ࣌TVΞϓϦͰϑϨʔϜʙඵͷζϨ͕ݟΒΕͨiOS 15 β2Ͱݕূ
ࢀߟηογϣϯWWDC21, Apple• Keynote 0:09:40• Platforms State of the Union 1:05:44• Meet Group Activities• Design for Group Activities• Coordinate media experiences with Group Activities• Build custom experiences with Group Activities• Coordinate media playback in Safari with Group Activities
AppleެࣜϦιʔε• Human Interface GuidelinesSharePlayͷষ͕Ճ͞Ε͍ͯΔ• αϯϓϧίʔυ• Supporting Coordinated Media Playback• API ϦϑΝϨϯε• GroupActivities• AVPlaybackCoordinator
ॴײ• ͱΓ͋͑ͣΈࠐΈ͚ͩͳΒطଘ࣮Λେ͖͘ม͑Δ͜ͱͳ͘Մೳ• SharePlayΛػʹΠϯετʔϧͯ͘͠ΕͨϢʔβ͕εϜʔζʹࢹௌ։࢝Ͱ͖ΔྲྀΕΛߟ͑Δඞཁ͕͋Δ• ࠂͷѻ͍͕ͦ͠͏• Picture-in-PictureʹରԠ͢Δͱମݧͱͯ͠ͱͯྑ͍
Slides for Ice-breaking͓·͚
WWDC21• ڈʹҾ͖ଓ͖ΦϯϥΠϯ• ॳKeynoteͱPlatform State of the Union• 2Ҏ߱ຖηογϣϯಈը͕ެ։͞Ε͍ͯ͘ʢ४උग़དྷ࣍ୈʁʣ• 2ͷேͷஶ໊ਓΛݺΜͰߦΘΕΔεϖγϟϧΠϕϯτ݈ࡏ• ࠓNASAͰՐʹߦ͘ϩέοτͷઃܭΛ͞Ε͍ͯΔঁੑٕज़ऀ Tiera Fletcher͞Μʢ·ͩެ։தʂʣ• 1 on 1ͷϥϘͷଞɺCoding ChallengeForumΛͬͨऔΓΈ• εϥΠυ͕ެ։͞Εͳ͘ͳͬͯ͠·͍·͕ͨ͠ɺ͔ΘΓʹTranscript͕ศར• ΦϯϥΠϯͷԸܙͰηογϣϯͷ͕͞ϑϨΩγϒϧʹͳΓɺখ͞ΊͷτϐοΫ͕͍͘͢June 7-11
ಈըStreamingؔ࿈ͷτϐοΫεଟ͋͘Γ·ͨ͠
HLS Interstitials• ࠂΛಠཱͨ͠Ξηοτͱͯ͠ѻ͏• ͲͷࠂΛදࣔ͢Δ͔μΠφϛοΫʹมߋՄೳʢlate bindingʣ• ൪ͷҙͷҐஔʹࠂΛεέδϡʔϧՄೳ DISCONTINUITYλάͷΑ͏ʹηάϝϯτͰΔඞཁ͕ͳ͍• AirPlay, Picture in Pictureαϙʔτ ैདྷͷCSAIͰࠔ#EXT-X-DATERANGE:ID="ad1",CLASS="com.apple.hls.interstitial",START-DATE="2020-01-02T21:55:44.000Z",DURATION=15.0,X-ASSET-URI="http://example.com/ad1.m3u8",X-RESUME-OFFSET=0,X-RESTRICT="SKIP,JUMP"ϓϨΠϦετͷૠೖྫ (#EXT-X-ENDLIST ͷޙͳͲ)
HLS Content Steering• CDNͷෛՙࢄͷٕज़• εςΞϦϯάαʔόͰCDNͷ༏ઌॱҐͷϦετʢಈతʹมಈ͢ΔʣΛఏڙ• ಛఆͷCDNͰٸͳΞΫηε૿ωοτϫʔΫো͕ൃੜͨ࣌͠ɺεςΞϦϯάαʔόͰฦ͢Steering ManifestΛௐͯ͠৽ن͘͠༨༟ͷ͋ΔCDNʹΫϥΠΞϯτΛ༠ಋ͢Δ#EXTM3U#EXT-X-CONTENT-STEERING:SERVER-URI="/steering?video=00012",PATHWAY-ID="CN"#EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="avc1.640028",PATHWAY-ID="CN"https://cn.example.com/low/audio-video.m3u8#EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="avc1.640028",PATHWAY-ID="CN"https://jp.example.com/hi/audio-video.m3u8#EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="avc1.640028",PATHWAY-ID="JP"https://cn.example.com/low/audio-video.m3u8#EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="avc1.640028",PATHWAY-ID="JP"https://jp.example.com/hi/audio-video.m3u8ϚελʔϓϨΠϦετهड़ྫ