no commit message
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
/* 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user