/** * @license * Copyright 2016 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ goog.provide('shaka.util.MimeUtils'); /** * @namespace shaka.util.MimeUtils * @summary A set of utility functions for dealing with MIME types. */ /** * Takes a MIME type and optional codecs string and produces the full MIME type. * * @param {string} mimeType * @param {string=} opt_codecs * @return {string} */ shaka.util.MimeUtils.getFullType = function(mimeType, opt_codecs) { let fullMimeType = mimeType; if (opt_codecs) { fullMimeType += '; codecs="' + opt_codecs + '"'; } return fullMimeType; }; /** * Takes a Stream object and produces an extended MIME type with information * beyond the container and codec type, when available. * * @param {shakaExtern.Stream} stream * @return {string} */ shaka.util.MimeUtils.getExtendedType = function(stream) { let mimeType = stream.mimeType; for (let streamKey in shaka.util.MimeUtils.EXTENDED_MIME_PARAMETERS_) { let value = stream[streamKey]; let mimeKey = shaka.util.MimeUtils.EXTENDED_MIME_PARAMETERS_[streamKey]; if (value) { mimeType += '; ' + mimeKey + '="' + value + '"'; } } return mimeType; }; /** * A map from Stream object keys to MIME type parameters. These should be * ignored by platforms that do not recognize them. * * This initial set of parameters are all recognized by Chromecast. * * @const {!Object.} * @private */ shaka.util.MimeUtils.EXTENDED_MIME_PARAMETERS_ = { 'codecs': 'codecs', 'frameRate': 'framerate', // Ours is camelCase, theirs is lowercase. 'bandwidth': 'bitrate', // Thankfully these are in the same unit, bits/sec. 'width': 'width', 'height': 'height', 'channelCount': 'channels' };