summaryrefslogtreecommitdiff
path: root/plugins/org.apache.cordova.media/src/tizen/MediaProxy.js
diff options
context:
space:
mode:
authorArjun Roychowdhury <pliablepixels@gmail.com>2015-10-28 13:31:08 -0400
committerArjun Roychowdhury <pliablepixels@gmail.com>2015-10-28 13:31:08 -0400
commite76b54b8e3f3d7299e5a921dcecc9dc442b278e1 (patch)
treecbfa4476dae975ed443361e37acef0ab0a45bfa1 /plugins/org.apache.cordova.media/src/tizen/MediaProxy.js
parent3cb5cda7583566cec66aabf3543b0d876a864369 (diff)
media plugin
Diffstat (limited to 'plugins/org.apache.cordova.media/src/tizen/MediaProxy.js')
-rw-r--r--plugins/org.apache.cordova.media/src/tizen/MediaProxy.js223
1 files changed, 223 insertions, 0 deletions
diff --git a/plugins/org.apache.cordova.media/src/tizen/MediaProxy.js b/plugins/org.apache.cordova.media/src/tizen/MediaProxy.js
new file mode 100644
index 00000000..c2ee4b07
--- /dev/null
+++ b/plugins/org.apache.cordova.media/src/tizen/MediaProxy.js
@@ -0,0 +1,223 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ *
+*/
+
+var cordova = require('cordova'),
+ Media = require('org.apache.cordova.media.Media');
+
+var MediaError = require('org.apache.cordova.media.MediaError'),
+ audioObjects = {};
+
+module.exports = {
+ // Initiates the audio file
+ create:function(successCallback, errorCallback, args) {
+ var id = args[0], src = args[1];
+
+ console.log("media::create() - id =" + id + ", src =" + src);
+
+ audioObjects[id] = new Audio(src);
+
+ audioObjects[id].onStalledCB = function () {
+ console.log("media::onStalled()");
+
+ audioObjects[id].timer = window.setTimeout(
+ function () {
+ audioObjects[id].pause();
+
+ if (audioObjects[id].currentTime !== 0)
+ audioObjects[id].currentTime = 0;
+
+ console.log("media::onStalled() - MEDIA_ERROR -> " + MediaError.MEDIA_ERR_ABORTED);
+
+ var err = new MediaError(MediaError.MEDIA_ERR_ABORTED, "Stalled");
+
+ Media.onStatus(id, Media.MEDIA_ERROR, err);
+ },
+ 2000);
+ };
+
+ audioObjects[id].onEndedCB = function () {
+ console.log("media::onEndedCB() - MEDIA_STATE -> MEDIA_STOPPED");
+
+ Media.onStatus(id, Media.MEDIA_STATE, Media.MEDIA_STOPPED);
+ };
+
+ audioObjects[id].onErrorCB = function () {
+ console.log("media::onErrorCB() - MEDIA_ERROR -> " + event.srcElement.error);
+
+ Media.onStatus(id, Media.MEDIA_ERROR, event.srcElement.error);
+ };
+
+ audioObjects[id].onPlayCB = function () {
+ console.log("media::onPlayCB() - MEDIA_STATE -> MEDIA_STARTING");
+
+ Media.onStatus(id, Media.MEDIA_STATE, Media.MEDIA_STARTING);
+ };
+
+ audioObjects[id].onPlayingCB = function () {
+ console.log("media::onPlayingCB() - MEDIA_STATE -> MEDIA_RUNNING");
+
+ Media.onStatus(id, Media.MEDIA_STATE, Media.MEDIA_RUNNING);
+ };
+
+ audioObjects[id].onDurationChangeCB = function () {
+ console.log("media::onDurationChangeCB() - MEDIA_DURATION -> " + audioObjects[id].duration);
+
+ Media.onStatus(id, Media.MEDIA_DURATION, audioObjects[id].duration);
+ };
+
+ audioObjects[id].onTimeUpdateCB = function () {
+ console.log("media::onTimeUpdateCB() - MEDIA_POSITION -> " + audioObjects[id].currentTime);
+
+ Media.onStatus(id, Media.MEDIA_POSITION, audioObjects[id].currentTime);
+ };
+
+ audioObjects[id].onCanPlayCB = function () {
+ console.log("media::onCanPlayCB()");
+
+ window.clearTimeout(audioObjects[id].timer);
+
+ audioObjects[id].play();
+ };
+
+ },
+
+ // Start playing the audio
+ startPlayingAudio:function(successCallback, errorCallback, args) {
+ var id = args[0], src = args[1], options = args[2];
+
+ console.log("media::startPlayingAudio() - id =" + id + ", src =" + src + ", options =" + options);
+
+ audioObjects[id].addEventListener('canplay', audioObjects[id].onCanPlayCB);
+ audioObjects[id].addEventListener('ended', audioObjects[id].onEndedCB);
+ audioObjects[id].addEventListener('timeupdate', audioObjects[id].onTimeUpdateCB);
+ audioObjects[id].addEventListener('durationchange', audioObjects[id].onDurationChangeCB);
+ audioObjects[id].addEventListener('playing', audioObjects[id].onPlayingCB);
+ audioObjects[id].addEventListener('play', audioObjects[id].onPlayCB);
+ audioObjects[id].addEventListener('error', audioObjects[id].onErrorCB);
+ audioObjects[id].addEventListener('stalled', audioObjects[id].onStalledCB);
+
+ audioObjects[id].play();
+ },
+
+ // Stops the playing audio
+ stopPlayingAudio:function(successCallback, errorCallback, args) {
+ var id = args[0];
+
+ window.clearTimeout(audioObjects[id].timer);
+
+ audioObjects[id].pause();
+
+ if (audioObjects[id].currentTime !== 0)
+ audioObjects[id].currentTime = 0;
+
+ console.log("media::stopPlayingAudio() - MEDIA_STATE -> MEDIA_STOPPED");
+
+ Media.onStatus(id, Media.MEDIA_STATE, Media.MEDIA_STOPPED);
+
+ audioObjects[id].removeEventListener('canplay', audioObjects[id].onCanPlayCB);
+ audioObjects[id].removeEventListener('ended', audioObjects[id].onEndedCB);
+ audioObjects[id].removeEventListener('timeupdate', audioObjects[id].onTimeUpdateCB);
+ audioObjects[id].removeEventListener('durationchange', audioObjects[id].onDurationChangeCB);
+ audioObjects[id].removeEventListener('playing', audioObjects[id].onPlayingCB);
+ audioObjects[id].removeEventListener('play', audioObjects[id].onPlayCB);
+ audioObjects[id].removeEventListener('error', audioObjects[id].onErrorCB);
+ audioObjects[id].removeEventListener('error', audioObjects[id].onStalledCB);
+ },
+
+ // Seeks to the position in the audio
+ seekToAudio:function(successCallback, errorCallback, args) {
+ var id = args[0], milliseconds = args[1];
+
+ console.log("media::seekToAudio()");
+
+ audioObjects[id].currentTime = milliseconds;
+ successCallback( audioObjects[id].currentTime);
+ },
+
+ // Pauses the playing audio
+ pausePlayingAudio:function(successCallback, errorCallback, args) {
+ var id = args[0];
+
+ console.log("media::pausePlayingAudio() - MEDIA_STATE -> MEDIA_PAUSED");
+
+ audioObjects[id].pause();
+
+ Media.onStatus(id, Media.MEDIA_STATE, Media.MEDIA_PAUSED);
+ },
+
+ // Gets current position in the audio
+ getCurrentPositionAudio:function(successCallback, errorCallback, args) {
+ var id = args[0];
+ console.log("media::getCurrentPositionAudio()");
+ successCallback(audioObjects[id].currentTime);
+ },
+
+ // Start recording audio
+ startRecordingAudio:function(successCallback, errorCallback, args) {
+ var id = args[0], src = args[1];
+
+ console.log("media::startRecordingAudio() - id =" + id + ", src =" + src);
+
+ function gotStreamCB(stream) {
+ audioObjects[id].src = webkitURL.createObjectURL(stream);
+ console.log("media::startRecordingAudio() - stream CB");
+ }
+
+ function gotStreamFailedCB(error) {
+ console.log("media::startRecordingAudio() - error CB:" + error.toString());
+ }
+
+ if (navigator.webkitGetUserMedia) {
+ audioObjects[id] = new Audio();
+ navigator.webkitGetUserMedia('audio', gotStreamCB, gotStreamFailedCB);
+ } else {
+ console.log("webkitGetUserMedia not supported");
+ }
+ successCallback();
+ },
+
+ // Stop recording audio
+ stopRecordingAudio:function(successCallback, errorCallback, args) {
+ var id = args[0];
+
+ console.log("media::stopRecordingAudio() - id =" + id);
+
+ audioObjects[id].pause();
+ successCallback();
+ },
+
+ // Release the media object
+ release:function(successCallback, errorCallback, args) {
+ var id = args[0];
+ window.clearTimeout(audioObjects[id].timer);
+ console.log("media::release()");
+ },
+
+ setVolume:function(successCallback, errorCallback, args) {
+ var id = args[0], volume = args[1];
+
+ console.log("media::setVolume()");
+
+ audioObjects[id].volume = volume;
+ }
+};
+
+require("cordova/tizen/commandProxy").add("Media", module.exports);