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

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

GCKMediaTrack অবজেক্ট ট্র্যাককে বোঝায়। এতে অনন্য সংখ্যাসূচক শনাক্তকারী এবং কন্টেন্ট আইডি ও শীর্ষকের মতো অন্যান্য অ্যাট্রিবিউট থাকে। GCKMediaTrack ইনস্ট্যান্স নিচে উল্লেখ করা পদ্ধতিতে তৈরি করা যেতে পারে:

Swift
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)
Objective-C
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 প্রপার্টি আপডেট করতে হবে। প্রেরকের থেকে প্রাপকের কাছে মিডিয়া লোড করার আগে, আপনার অ্যাপকে এই অ্যাসোসিয়েশন তৈরি করতে হবে, যেমন নিম্নলিখিত কোডে দেখানো হয়েছে:

Swift
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()
Objective-C
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:] কল করে মিডিয়া আইটেমের সাথে যুক্ত এক বা একাধিক ট্র্যাক অ্যাক্টিভেট করুন (মিডিয়া লোড হওয়ার পরে) এবং অ্যাক্টিভেট করা ট্র্যাকের আইডি পাস করুন। যেমন, নিম্নলিখিত কোডটি উপরে তৈরি করা ক্যাপশন ট্র্যাক অ্যাক্টিভেট করে।

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([1])
Objective-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[@1]];

বর্তমান মিডিয়া আইটেমে কোনও ট্র্যাক ডিঅ্যাক্টিভেট করতে, খালি অ্যারে বা nil সহ -[setActiveTrackIDs:] on GCKRemoteMediaClient কল করুন। নিচের কোডটি ক্যাপশন ট্র্যাক বন্ধ করে দেয়।

Swift
sessionManager.currentSession?.remoteMediaClient?.setActiveTrackIDs([])
Objective-C
[self.sessionManager.currentSession.remoteMediaClient setActiveTrackIDs:@[]];

টেক্সট ট্র্যাকের স্টাইল

GCKMediaTextTrackStyle ক্লাস, টেক্সট ট্র্যাকের স্টাইল সংক্রান্ত তথ্য এনক্যাপসুলেট করে। -[GCKRemoteMediaClient setTextTrackStyle] কল করে বর্তমানে চলমান মিডিয়া আইটেমে ট্র্যাক স্টাইল প্রয়োগ করা যেতে পারে। নিচের কোডে তৈরি ট্র্যাক স্টাইল ৫০% অস্বচ্ছতা (৮০) সহ টেক্সটকে লাল (FF) করে এবং একটি সেরিফ ফন্ট সেট করে।

Swift
let textTrackStyle = GCKMediaTextTrackStyle.createDefault()
textTrackStyle.foregroundColor = GCKColor.init(cssString: "#FF000080")
textTrackStyle.fontFamily = "serif"
styleChangeRequest = sessionManager.currentSession?.remoteMediaClient?.setTextTrackStyle(textTrackStyle)
styleChangeRequest?.delegate = self
Objective-C
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 অবজেক্ট ব্যবহার করতে পারেন।

Swift
// MARK: - GCKRequestDelegate

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

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

আরও তথ্যের জন্য নিচে স্ট্যাটাস আপডেট দেখুন। অ্যাপে টেক্সট ট্র্যাকের স্টাইল আপডেট করার সুবিধা থাকতে হবে। এটি সিস্টেমের দেওয়া সেটিংস বা অ্যাপের নিজস্ব সেটিংস ব্যবহার করে করা যেতে পারে। একটি ডিফল্ট স্টাইল প্রদান করা হয়, যা স্ট্যাটিক মেথড +[GCKMediaTextTrackStyle createDefault]-এর মাধ্যমে রিট্রিভ করা যায়। নিম্নলিখিত টেক্সট ট্র্যাক স্টাইল এলিমেন্ট পরিবর্তন করা যেতে পারে:

  • ফোরগ্রাউন্ড (টেক্সট) কালার ও অস্বচ্ছতা
  • ব্যাকগ্রাউন্ডের রঙ ও অস্পষ্টতা
  • এজ প্রকার
  • এজের রঙ
  • ফন্ট স্কেল
  • হরফ পরিবার
  • ফন্টের স্টাইল

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

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

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

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

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