Files
moeplayer/source/org/mangui/hls/playlist/DataUri.as
T
2020-09-17 18:40:01 +08:00

78 lines
2.5 KiB
ActionScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mangui.hls.playlist {
CONFIG::LOGGING {
import org.mangui.hls.utils.Log;
}
/**
* Facilitates extracting information from a data URI.
*/
public class DataUri {
private static const DATA_PROTOCOL : String = "data:";
private static const BASE_64 : String = "base64";
private var _dataUri : String;
public function DataUri(dataUri : String) {
_dataUri = dataUri;
}
/**
* @return Returns the data portion of the data URI if it is able extract the information,
* null otherwise.
*/
public function extractData() : String {
if (_dataUri == null) {
return null;
}
var base64Index : int = _dataUri.indexOf(BASE_64 + ',');
var dataIndex : int = _dataUri.indexOf(',') + 1;
if (dataIndex > _dataUri.length) {
return null;
}
var data : String = _dataUri.substr(dataIndex);
return (base64Index === -1) ? _extractPlainData(data) : _extractBase64Data(data);
}
/**
* Data URIs support base 64 encoding the data section.
* This is not typically used for plain text files, which includes HLS manifests.
* As such, decoded base 64 data sections is not currently (6/18/14) supported.
* @param data
* @return
*/
private function _extractBase64Data(data : String) : String {
CONFIG::LOGGING {
Log.warn("Base 64 encoded Data URIs are not supported.");
}
return null;
}
/**
* @param data
* @return The URL decoded data section from the data URI.
*/
private function _extractPlainData(data : String) : String {
var decodedData : String = decodeURIComponent(data);
CONFIG::LOGGING {
Log.debug2("Decoded data from data URI into: " + decodedData);
}
return decodedData;
}
/**
* @param dataUri
* @return True if the provided string is a data URI, false otherwise.
*/
public static function isDataUri(dataUri : String) : Boolean {
return dataUri != null && dataUri.indexOf(DATA_PROTOCOL) === 0;
}
}
}