মিডিয়া ট্র্যাক ব্যবহার করে

একটি মিডিয়া ট্র্যাক একটি অডিও বা ভিডিও স্ট্রিম অবজেক্ট, অথবা একটি টেক্সট অবজেক্ট (সাবটাইটেল বা ক্যাপশন) হতে পারে।

একটি GCKMediaTrack বস্তু একটি ট্র্যাক প্রতিনিধিত্ব করে। এটি একটি অনন্য সংখ্যাসূচক শনাক্তকারী এবং অন্যান্য বৈশিষ্ট্য যেমন একটি বিষয়বস্তু আইডি এবং শিরোনাম নিয়ে গঠিত। একটি GCKMediaTrack উদাহরণ নিম্নরূপ তৈরি করা যেতে পারে:

let captionsTrack = GCKMediaTrack.init(identifier: 1,
                                       contentIdentifier
: "https://some-url/caption_en.vtt",
                                       contentType
: "text/vtt",
                                       type
: GCKMediaTrackType.text,
                                       textSubtype
: GCKMediaTextTrackSubtype.captions,
                                       name
: "English Captions",
                                       languageCode
: "en",
                                       customData
: nil)
GCKMediaTrack *captionsTrack =
     
[[GCKMediaTrack alloc] initWithIdentifier:1
                              contentIdentifier
:@"https://some-url/caption_en.vtt"
                                    contentType
:@"text/vtt"
                                           type
:GCKMediaTrackTypeText
                                    textSubtype
:GCKMediaTextTrackSubtypeCaptions
                                           name
:@"English Captions"
                                   languageCode
:@"en"
                                     customData
:nil];

একটি মিডিয়া আইটেম একাধিক ট্র্যাক থাকতে পারে; উদাহরণস্বরূপ, এটিতে একাধিক সাবটাইটেল থাকতে পারে (প্রতিটি আলাদা ভাষার জন্য) বা একাধিক বিকল্প অডিও স্ট্রিম (বিভিন্ন ভাষার জন্য)। GCKMediaInformation হল একটি শ্রেণী যা একটি মিডিয়া আইটেম প্রতিনিধিত্ব করে। একটি মিডিয়া আইটেমের সাথে GCKMediaTrack অবজেক্টের একটি সংগ্রহকে সংযুক্ত করতে, আপনার অ্যাপের mediaTracks সম্পত্তি আপডেট করা উচিত। রিসিভারে মিডিয়া লোড করার আগে আপনার অ্যাপটিকে এই অ্যাসোসিয়েশন করতে হবে, যেমনটি নিম্নলিখিত কোডে রয়েছে:

let tracks = [captionsTrack]

let url = URL.init(string: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")
guard
let mediaURL = url else {
  print
("invalid mediaURL")
 
return
}

let mediaInfoBuilder = GCKMediaInformationBuilder.init(contentURL: mediaURL)
mediaInfoBuilder
.streamType = GCKMediaStreamType.none;
mediaInfoBuilder
.contentType = "video/mp4"
mediaInfoBuilder
.metadata = metadata;
mediaInfoBuilder
.mediaTracks = tracks;
mediaInformation
= mediaInfoBuilder.build()
NSArray *tracks = @[captionsTrack];

GCKMediaInformationBuilder *mediaInfoBuilder =
 
[[GCKMediaInformationBuilder alloc] initWithContentURL:
   
[NSURL URLWithString:@"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"]];
mediaInfoBuilder
.streamType = GCKMediaStreamTypeNone;
mediaInfoBuilder
.contentType = @"video/mp4";
mediaInfoBuilder
.metadata = metadata;
mediaInfoBuilder
.mediaTracks = tracks;
self.mediaInformation = [mediaInfoBuilder build];

GCKRemoteMediaClient-[setActiveTrackIDs:] কল করে এবং সক্রিয় করার জন্য ট্র্যাকগুলির আইডি পাস করে মিডিয়া আইটেমের সাথে যুক্ত এক বা একাধিক ট্র্যাক সক্রিয় করুন। উদাহরণস্বরূপ, নিচের কোডটি উপরে তৈরি করা ক্যাপশন ট্র্যাকটিকে সক্রিয় করে।

sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

বর্তমান মিডিয়া আইটেমের একটি ট্র্যাক নিষ্ক্রিয় করতে, একটি খালি অ্যারে বা শূন্য সহ GCKRemoteMediaClient-[setActiveTrackIDs:] কল করুন। নিম্নলিখিত কোড ক্যাপশন ট্র্যাক নিষ্ক্রিয়.

sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

শৈলী পাঠ্য ট্র্যাক

GCKMediaTextTrackStyle ক্লাস একটি টেক্সট ট্র্যাকের শৈলী তথ্যকে অন্তর্ভুক্ত করে। -[GCKRemoteMediaClient setTextTrackStyle] কল করে একটি ট্র্যাক শৈলী বর্তমানে প্লে করা মিডিয়া আইটেমটিতে প্রয়োগ করা যেতে পারে। নীচের কোডে তৈরি ট্র্যাক শৈলী 50% অস্বচ্ছতায় (80) পাঠ্যকে লাল (FF) করে এবং একটি সেরিফ ফন্ট সেট করে।

let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle
.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle
.fontFamily = "serif"
styleChangeRequest
= sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest
?.delegate = self
GCKMediaTextTrackStyle *textTrackStyle = [GCKMediaTextTrackStyle createDefault];
[textTrackStyle setForegroundColor:[[GCKColor alloc] initWithCSSString:@"#FF000080"]];
[textTrackStyle setFontFamily:@"serif"];
self.styleChangeRequest = [self.sessionManager.currentSession.remoteMediaClient setTextTrackStyle:textTrackStyle];
self.styleChangeRequest.delegate = self;

এই অনুরোধ ট্র্যাক করার জন্য আপনি ফেরত দেওয়া GCKRequest অবজেক্ট ব্যবহার করতে পারেন।

// MARK: - GCKRequestDelegate

func requestDidComplete(_ request: GCKRequest) {
 
if request == styleChangeRequest {
    print
("Style update completed.")
    styleChangeRequest
= nil
 
}
}
#pragma mark - GCKRequestDelegate

- (void)requestDidComplete:(GCKRequest *)request {
 
if (request == self.styleChangeRequest) {
   
NSLog(@"Style update completed.");
   
self.styleChangeRequest = nil;
 
}
}

আরও তথ্যের জন্য নীচের অবস্থা আপডেট দেখুন. অ্যাপগুলিকে ব্যবহারকারীদের টেক্সট ট্র্যাকের জন্য স্টাইল আপডেট করার অনুমতি দেওয়া উচিত, হয় সিস্টেম দ্বারা প্রদত্ত সেটিংস ব্যবহার করে বা অ্যাপ নিজেই। একটি ডিফল্ট শৈলী দেওয়া আছে (iOS 7 এবং পরবর্তীতে), যা স্ট্যাটিক পদ্ধতি +[GCKMediaTextTrackStyle createDefault] এর মাধ্যমে পুনরুদ্ধার করা যেতে পারে। নিম্নলিখিত পাঠ্য ট্র্যাক শৈলী উপাদান পরিবর্তন করা যেতে পারে:

  • ফোরগ্রাউন্ড (টেক্সট) রঙ এবং অস্বচ্ছতা
  • পটভূমির রঙ এবং অস্বচ্ছতা
  • প্রান্ত প্রকার
  • প্রান্ত রঙ
  • ফন্ট স্কেল
  • ফন্ট পরিবার
  • ফন্ট স্টাইল

স্ট্যাটাস আপডেট পান

যখন একাধিক প্রেরক একই রিসিভারের সাথে সংযুক্ত থাকে, তখন প্রতিটি প্রেরকের জন্য রিসিভারের পরিবর্তনগুলি সম্পর্কে সচেতন হওয়া গুরুত্বপূর্ণ, যদিও সেই পরিবর্তনগুলি অন্য প্রেরকদের থেকে শুরু করা হয়েছিল।

আপনার প্রেরক রিসিভার থেকে স্ট্যাটাস আপডেট পেয়েছেন তা নিশ্চিত করতে, আপনার অ্যাপকে একটি GCKRemoteMediaClientListener নিবন্ধন করা উচিত। যদি বর্তমান মিডিয়ার GCKMediaTextTrackStyle পরিবর্তিত হয়, তাহলে সংযুক্ত প্রেরকদের সকলকে -[remoteMediaClient:didUpdateMediaMetadata:] এবং -[remoteMediaClient:didUpdateMediaStatus:] কলব্যাকের মাধ্যমে জানানো হবে। এই ক্ষেত্রে, প্রাপক SDK যাচাই করে না যে নতুন শৈলীটি আগেরটির থেকে আলাদা কিনা এবং নির্বিশেষে সমস্ত সংযুক্ত প্রেরককে অবহিত করে৷ তবে, যদি সক্রিয় ট্র্যাকগুলির তালিকা আপডেট করা হয়, শুধুমাত্র সংযুক্ত প্রেরকদের মধ্যে -[remoteMediaClient:didUpdateMediaStatus:] কে জানানো হবে৷

CORS প্রয়োজনীয়তা পূরণ করুন

অভিযোজিত মিডিয়া স্ট্রিমিংয়ের জন্য, Google Cast-এর জন্য CORS শিরোনামের উপস্থিতি প্রয়োজন, কিন্তু এমনকি সাধারণ mp4 মিডিয়া স্ট্রিমগুলিতে ট্র্যাক অন্তর্ভুক্ত থাকলে CORS প্রয়োজন। আপনি যদি কোনও মিডিয়ার জন্য ট্র্যাকগুলি সক্ষম করতে চান তবে আপনাকে অবশ্যই আপনার ট্র্যাক স্ট্রীম এবং আপনার মিডিয়া স্ট্রিম উভয়ের জন্য CORS সক্ষম করতে হবে৷ সুতরাং, যদি আপনার সার্ভারে আপনার সাধারণ mp4 মিডিয়ার জন্য CORS শিরোনাম উপলব্ধ না থাকে এবং আপনি একটি সাধারণ সাবটাইটেল ট্র্যাক যোগ করেন, তাহলে আপনি আপনার মিডিয়া স্ট্রিম করতে পারবেন না যতক্ষণ না আপনি উপযুক্ত CORS হেডার অন্তর্ভুক্ত করার জন্য আপনার সার্ভার আপডেট করেন। উপরন্তু, আপনাকে কমপক্ষে নিম্নলিখিত শিরোনামগুলির অনুমতি দিতে হবে: বিষয়বস্তু-প্রকার, স্বীকার-এনকোডিং এবং পরিসর। মনে রাখবেন যে শেষ দুটি শিরোনাম অতিরিক্ত শিরোনাম যা আপনার আগে প্রয়োজন নাও হতে পারে।