You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
652 lines
16 KiB
Markdown
652 lines
16 KiB
Markdown
8 years ago
|
---
|
||
|
title: Media
|
||
|
description: Record and play audio on the device.
|
||
|
---
|
||
|
<!--
|
||
|
# license: 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.
|
||
|
-->
|
||
|
|
||
|
[![Build Status](https://travis-ci.org/apache/cordova-plugin-media.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-media)
|
||
|
|
||
|
# cordova-plugin-media
|
||
|
|
||
|
|
||
|
This plugin provides the ability to record and play back audio files on a device.
|
||
|
|
||
|
__NOTE__: The current implementation does not adhere to a W3C
|
||
|
specification for media capture, and is provided for convenience only.
|
||
|
A future implementation will adhere to the latest W3C specification
|
||
|
and may deprecate the current APIs.
|
||
|
|
||
|
This plugin defines a global `Media` Constructor.
|
||
|
|
||
|
Although in the global scope, it is not available until after the `deviceready` event.
|
||
|
|
||
|
document.addEventListener("deviceready", onDeviceReady, false);
|
||
|
function onDeviceReady() {
|
||
|
console.log(Media);
|
||
|
}
|
||
|
|
||
|
Report issues with this plugin on the [Apache Cordova issue tracker](https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22Plugin%20Media%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC)
|
||
|
|
||
|
|
||
|
## Installation
|
||
|
|
||
|
cordova plugin add cordova-plugin-media
|
||
|
|
||
|
## Supported Platforms
|
||
|
|
||
|
- Android
|
||
|
- BlackBerry 10
|
||
|
- iOS
|
||
|
- Windows Phone 7 and 8
|
||
|
- Tizen
|
||
|
- Windows 8
|
||
|
- Windows
|
||
|
- Browser
|
||
|
|
||
|
## Windows Phone Quirks
|
||
|
|
||
|
- Only one media file can be played back at a time.
|
||
|
|
||
|
## Media
|
||
|
|
||
|
var media = new Media(src, mediaSuccess, [mediaError], [mediaStatus]);
|
||
|
|
||
|
### Parameters
|
||
|
|
||
|
- __src__: A URI containing the audio content. _(DOMString)_
|
||
|
|
||
|
- __mediaSuccess__: (Optional) The callback that executes after a `Media` object has completed the current play, record, or stop action. _(Function)_
|
||
|
|
||
|
- __mediaError__: (Optional) The callback that executes if an error occurs. _(Function)_
|
||
|
|
||
|
- __mediaStatus__: (Optional) The callback that executes to indicate status changes. _(Function)_
|
||
|
|
||
|
__NOTE__: `cdvfile` path is supported as `src` parameter:
|
||
|
```javascript
|
||
|
var my_media = new Media('cdvfile://localhost/temporary/recording.mp3', ...);
|
||
|
```
|
||
|
|
||
|
### Constants
|
||
|
|
||
|
The following constants are reported as the only parameter to the
|
||
|
`mediaStatus` callback:
|
||
|
|
||
|
- `Media.MEDIA_NONE` = 0;
|
||
|
- `Media.MEDIA_STARTING` = 1;
|
||
|
- `Media.MEDIA_RUNNING` = 2;
|
||
|
- `Media.MEDIA_PAUSED` = 3;
|
||
|
- `Media.MEDIA_STOPPED` = 4;
|
||
|
|
||
|
### Methods
|
||
|
|
||
|
- `media.getCurrentAmplitude`: Returns the current position within an audio file.
|
||
|
|
||
|
- `media.getCurrentPosition`: Returns the current position within an audio file.
|
||
|
|
||
|
- `media.getDuration`: Returns the duration of an audio file.
|
||
|
|
||
|
- `media.play`: Start or resume playing an audio file.
|
||
|
|
||
|
- `media.pause`: Pause playback of an audio file.
|
||
|
|
||
|
- `media.pauseRecord`: Pause recording of an audio file.
|
||
|
|
||
|
- `media.release`: Releases the underlying operating system's audio resources.
|
||
|
|
||
|
- `media.resumeRecord`: Resume recording of an audio file.
|
||
|
|
||
|
- `media.seekTo`: Moves the position within the audio file.
|
||
|
|
||
|
- `media.setVolume`: Set the volume for audio playback.
|
||
|
|
||
|
- `media.startRecord`: Start recording an audio file.
|
||
|
|
||
|
- `media.stopRecord`: Stop recording an audio file.
|
||
|
|
||
|
- `media.stop`: Stop playing an audio file.
|
||
|
|
||
|
### Additional ReadOnly Parameters
|
||
|
|
||
|
- __position__: The position within the audio playback, in seconds.
|
||
|
- Not automatically updated during play; call `getCurrentPosition` to update.
|
||
|
|
||
|
- __duration__: The duration of the media, in seconds.
|
||
|
|
||
|
|
||
|
## media.getCurrentAmplitude
|
||
|
|
||
|
Returns the current amplitude of the current recording.
|
||
|
|
||
|
media.getCurrentAmplitude(mediaSuccess, [mediaError]);
|
||
|
|
||
|
### Supported Platforms
|
||
|
|
||
|
- Android
|
||
|
- iOS
|
||
|
|
||
|
### Parameters
|
||
|
|
||
|
- __mediaSuccess__: The callback that is passed the current amplitude (0.0 - 1.0).
|
||
|
|
||
|
- __mediaError__: (Optional) The callback to execute if an error occurs.
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Audio player
|
||
|
//
|
||
|
var my_media = new Media(src, onSuccess, onError);
|
||
|
|
||
|
// Record audio
|
||
|
my_media.startRecord();
|
||
|
|
||
|
mediaTimer = setInterval(function () {
|
||
|
// get media amplitude
|
||
|
my_media.getCurrentAmplitude(
|
||
|
// success callback
|
||
|
function (amp) {
|
||
|
console.log(amp + "%");
|
||
|
},
|
||
|
// error callback
|
||
|
function (e) {
|
||
|
console.log("Error getting amp=" + e);
|
||
|
}
|
||
|
);
|
||
|
}, 1000);
|
||
|
|
||
|
|
||
|
## media.getCurrentPosition
|
||
|
|
||
|
Returns the current position within an audio file. Also updates the `Media` object's `position` parameter.
|
||
|
|
||
|
media.getCurrentPosition(mediaSuccess, [mediaError]);
|
||
|
|
||
|
### Parameters
|
||
|
|
||
|
- __mediaSuccess__: The callback that is passed the current position in seconds.
|
||
|
|
||
|
- __mediaError__: (Optional) The callback to execute if an error occurs.
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Audio player
|
||
|
//
|
||
|
var my_media = new Media(src, onSuccess, onError);
|
||
|
|
||
|
// Update media position every second
|
||
|
var mediaTimer = setInterval(function () {
|
||
|
// get media position
|
||
|
my_media.getCurrentPosition(
|
||
|
// success callback
|
||
|
function (position) {
|
||
|
if (position > -1) {
|
||
|
console.log((position) + " sec");
|
||
|
}
|
||
|
},
|
||
|
// error callback
|
||
|
function (e) {
|
||
|
console.log("Error getting pos=" + e);
|
||
|
}
|
||
|
);
|
||
|
}, 1000);
|
||
|
|
||
|
|
||
|
## media.getDuration
|
||
|
|
||
|
Returns the duration of an audio file in seconds. If the duration is unknown, it returns a value of -1.
|
||
|
|
||
|
|
||
|
media.getDuration();
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Audio player
|
||
|
//
|
||
|
var my_media = new Media(src, onSuccess, onError);
|
||
|
|
||
|
// Get duration
|
||
|
var counter = 0;
|
||
|
var timerDur = setInterval(function() {
|
||
|
counter = counter + 100;
|
||
|
if (counter > 2000) {
|
||
|
clearInterval(timerDur);
|
||
|
}
|
||
|
var dur = my_media.getDuration();
|
||
|
if (dur > 0) {
|
||
|
clearInterval(timerDur);
|
||
|
document.getElementById('audio_duration').innerHTML = (dur) + " sec";
|
||
|
}
|
||
|
}, 100);
|
||
|
|
||
|
|
||
|
## media.pause
|
||
|
|
||
|
Pauses playing an audio file.
|
||
|
|
||
|
media.pause();
|
||
|
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Play audio
|
||
|
//
|
||
|
function playAudio(url) {
|
||
|
// Play the audio file at url
|
||
|
var my_media = new Media(url,
|
||
|
// success callback
|
||
|
function () { console.log("playAudio():Audio Success"); },
|
||
|
// error callback
|
||
|
function (err) { console.log("playAudio():Audio Error: " + err); }
|
||
|
);
|
||
|
|
||
|
// Play audio
|
||
|
my_media.play();
|
||
|
|
||
|
// Pause after 10 seconds
|
||
|
setTimeout(function () {
|
||
|
my_media.pause();
|
||
|
}, 10000);
|
||
|
}
|
||
|
|
||
|
|
||
|
## media.pauseRecord
|
||
|
|
||
|
Pauses recording an audio file.
|
||
|
|
||
|
media.pauseRecord();
|
||
|
|
||
|
|
||
|
### Supported Platforms
|
||
|
|
||
|
- iOS
|
||
|
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Record audio
|
||
|
//
|
||
|
function recordAudio() {
|
||
|
var src = "myrecording.mp3";
|
||
|
var mediaRec = new Media(src,
|
||
|
// success callback
|
||
|
function() {
|
||
|
console.log("recordAudio():Audio Success");
|
||
|
},
|
||
|
|
||
|
// error callback
|
||
|
function(err) {
|
||
|
console.log("recordAudio():Audio Error: "+ err.code);
|
||
|
});
|
||
|
|
||
|
// Record audio
|
||
|
mediaRec.startRecord();
|
||
|
|
||
|
// Pause Recording after 5 seconds
|
||
|
setTimeout(function() {
|
||
|
my_media.pauseRecord();
|
||
|
}, 5000);
|
||
|
}
|
||
|
|
||
|
## media.play
|
||
|
|
||
|
Starts or resumes playing an audio file.
|
||
|
|
||
|
media.play();
|
||
|
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Play audio
|
||
|
//
|
||
|
function playAudio(url) {
|
||
|
// Play the audio file at url
|
||
|
var my_media = new Media(url,
|
||
|
// success callback
|
||
|
function () {
|
||
|
console.log("playAudio():Audio Success");
|
||
|
},
|
||
|
// error callback
|
||
|
function (err) {
|
||
|
console.log("playAudio():Audio Error: " + err);
|
||
|
}
|
||
|
);
|
||
|
// Play audio
|
||
|
my_media.play();
|
||
|
}
|
||
|
|
||
|
|
||
|
### iOS Quirks
|
||
|
|
||
|
- __numberOfLoops__: Pass this option to the `play` method to specify
|
||
|
the number of times you want the media file to play, e.g.:
|
||
|
|
||
|
var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3")
|
||
|
myMedia.play({ numberOfLoops: 2 })
|
||
|
|
||
|
- __playAudioWhenScreenIsLocked__: Pass in this option to the `play`
|
||
|
method to specify whether you want to allow playback when the screen
|
||
|
is locked. If set to `true` (the default value), the state of the
|
||
|
hardware mute button is ignored, e.g.:
|
||
|
|
||
|
var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3")
|
||
|
myMedia.play({ playAudioWhenScreenIsLocked : false })
|
||
|
|
||
|
- __order of file search__: When only a file name or simple path is
|
||
|
provided, iOS searches in the `www` directory for the file, then in
|
||
|
the application's `documents/tmp` directory:
|
||
|
|
||
|
var myMedia = new Media("audio/beer.mp3")
|
||
|
myMedia.play() // first looks for file in www/audio/beer.mp3 then in <application>/documents/tmp/audio/beer.mp3
|
||
|
|
||
|
## media.release
|
||
|
|
||
|
Releases the underlying operating system's audio resources.
|
||
|
This is particularly important for Android, since there are a finite amount of
|
||
|
OpenCore instances for media playback. Applications should call the `release`
|
||
|
function for any `Media` resource that is no longer needed.
|
||
|
|
||
|
media.release();
|
||
|
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Audio player
|
||
|
//
|
||
|
var my_media = new Media(src, onSuccess, onError);
|
||
|
|
||
|
my_media.play();
|
||
|
my_media.stop();
|
||
|
my_media.release();
|
||
|
|
||
|
|
||
|
## media.resumeRecord
|
||
|
|
||
|
Resume recording an audio file.
|
||
|
|
||
|
media.resumeRecord();
|
||
|
|
||
|
|
||
|
### Supported Platforms
|
||
|
|
||
|
- iOS
|
||
|
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Record audio
|
||
|
//
|
||
|
function recordAudio() {
|
||
|
var src = "myrecording.mp3";
|
||
|
var mediaRec = new Media(src,
|
||
|
// success callback
|
||
|
function() {
|
||
|
console.log("recordAudio():Audio Success");
|
||
|
},
|
||
|
|
||
|
// error callback
|
||
|
function(err) {
|
||
|
console.log("recordAudio():Audio Error: "+ err.code);
|
||
|
});
|
||
|
|
||
|
// Record audio
|
||
|
mediaRec.startRecord();
|
||
|
|
||
|
// Pause Recording after 5 seconds
|
||
|
setTimeout(function() {
|
||
|
my_media.pauseRecord();
|
||
|
}, 5000);
|
||
|
|
||
|
// Resume Recording after 10 seconds
|
||
|
setTimeout(function() {
|
||
|
my_media.resumeRecord();
|
||
|
}, 10000);
|
||
|
}
|
||
|
|
||
|
|
||
|
## media.seekTo
|
||
|
|
||
|
Sets the current position within an audio file.
|
||
|
|
||
|
media.seekTo(milliseconds);
|
||
|
|
||
|
### Parameters
|
||
|
|
||
|
- __milliseconds__: The position to set the playback position within the audio, in milliseconds.
|
||
|
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Audio player
|
||
|
//
|
||
|
var my_media = new Media(src, onSuccess, onError);
|
||
|
my_media.play();
|
||
|
// SeekTo to 10 seconds after 5 seconds
|
||
|
setTimeout(function() {
|
||
|
my_media.seekTo(10000);
|
||
|
}, 5000);
|
||
|
|
||
|
|
||
|
### BlackBerry 10 Quirks
|
||
|
|
||
|
- Not supported on BlackBerry OS 5 devices.
|
||
|
|
||
|
## media.setVolume
|
||
|
|
||
|
Set the volume for an audio file.
|
||
|
|
||
|
media.setVolume(volume);
|
||
|
|
||
|
### Parameters
|
||
|
|
||
|
- __volume__: The volume to set for playback. The value must be within the range of 0.0 to 1.0.
|
||
|
|
||
|
### Supported Platforms
|
||
|
|
||
|
- Android
|
||
|
- iOS
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Play audio
|
||
|
//
|
||
|
function playAudio(url) {
|
||
|
// Play the audio file at url
|
||
|
var my_media = new Media(url,
|
||
|
// success callback
|
||
|
function() {
|
||
|
console.log("playAudio():Audio Success");
|
||
|
},
|
||
|
// error callback
|
||
|
function(err) {
|
||
|
console.log("playAudio():Audio Error: "+err);
|
||
|
});
|
||
|
|
||
|
// Play audio
|
||
|
my_media.play();
|
||
|
|
||
|
// Mute volume after 2 seconds
|
||
|
setTimeout(function() {
|
||
|
my_media.setVolume('0.0');
|
||
|
}, 2000);
|
||
|
|
||
|
// Set volume to 1.0 after 5 seconds
|
||
|
setTimeout(function() {
|
||
|
my_media.setVolume('1.0');
|
||
|
}, 5000);
|
||
|
}
|
||
|
|
||
|
|
||
|
## media.startRecord
|
||
|
|
||
|
Starts recording an audio file.
|
||
|
|
||
|
media.startRecord();
|
||
|
|
||
|
### Supported Platforms
|
||
|
|
||
|
- Android
|
||
|
- iOS
|
||
|
- Windows Phone 7 and 8
|
||
|
- Windows
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Record audio
|
||
|
//
|
||
|
function recordAudio() {
|
||
|
var src = "myrecording.mp3";
|
||
|
var mediaRec = new Media(src,
|
||
|
// success callback
|
||
|
function() {
|
||
|
console.log("recordAudio():Audio Success");
|
||
|
},
|
||
|
|
||
|
// error callback
|
||
|
function(err) {
|
||
|
console.log("recordAudio():Audio Error: "+ err.code);
|
||
|
});
|
||
|
|
||
|
// Record audio
|
||
|
mediaRec.startRecord();
|
||
|
}
|
||
|
|
||
|
|
||
|
### Android Quirks
|
||
|
|
||
|
- Android devices record audio in Adaptive Multi-Rate format. The specified file should end with a _.amr_ extension.
|
||
|
- The hardware volume controls are wired up to the media volume while any Media objects are alive. Once the last created Media object has `release()` called on it, the volume controls revert to their default behaviour. The controls are also reset on page navigation, as this releases all Media objects.
|
||
|
|
||
|
### iOS Quirks
|
||
|
|
||
|
- iOS only records to files of type _.wav_ and returns an error if the file name extension is not correct.
|
||
|
|
||
|
- If a full path is not provided, the recording is placed in the application's `documents/tmp` directory. This can be accessed via the `File` API using `LocalFileSystem.TEMPORARY`. Any subdirectory specified at record time must already exist.
|
||
|
|
||
|
- Files can be recorded and played back using the documents URI:
|
||
|
|
||
|
var myMedia = new Media("documents://beer.mp3")
|
||
|
|
||
|
### Windows Quirks
|
||
|
|
||
|
- Windows devices can use MP3, M4A and WMA formats for recorded audio. However in most cases it is not possible to use MP3 for audio recording on _Windows Phone 8.1_ devices, because an MP3 encoder is [not shipped with Windows Phone](https://msdn.microsoft.com/en-us/library/windows/apps/windows.media.mediaproperties.mediaencodingprofile.createmp3.aspx).
|
||
|
|
||
|
- If a full path is not provided, the recording is placed in the `AppData/temp` directory. This can be accessed via the `File` API using `LocalFileSystem.TEMPORARY` or `ms-appdata:///temp/<filename>` URI.
|
||
|
|
||
|
- Any subdirectory specified at record time must already exist.
|
||
|
|
||
|
### Tizen Quirks
|
||
|
|
||
|
- Not supported on Tizen devices.
|
||
|
|
||
|
## media.stop
|
||
|
|
||
|
Stops playing an audio file.
|
||
|
|
||
|
media.stop();
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Play audio
|
||
|
//
|
||
|
function playAudio(url) {
|
||
|
// Play the audio file at url
|
||
|
var my_media = new Media(url,
|
||
|
// success callback
|
||
|
function() {
|
||
|
console.log("playAudio():Audio Success");
|
||
|
},
|
||
|
// error callback
|
||
|
function(err) {
|
||
|
console.log("playAudio():Audio Error: "+err);
|
||
|
}
|
||
|
);
|
||
|
|
||
|
// Play audio
|
||
|
my_media.play();
|
||
|
|
||
|
// Pause after 10 seconds
|
||
|
setTimeout(function() {
|
||
|
my_media.stop();
|
||
|
}, 10000);
|
||
|
}
|
||
|
|
||
|
|
||
|
## media.stopRecord
|
||
|
|
||
|
Stops recording an audio file.
|
||
|
|
||
|
media.stopRecord();
|
||
|
|
||
|
### Supported Platforms
|
||
|
|
||
|
- Android
|
||
|
- iOS
|
||
|
- Windows Phone 7 and 8
|
||
|
- Windows
|
||
|
|
||
|
### Quick Example
|
||
|
|
||
|
// Record audio
|
||
|
//
|
||
|
function recordAudio() {
|
||
|
var src = "myrecording.mp3";
|
||
|
var mediaRec = new Media(src,
|
||
|
// success callback
|
||
|
function() {
|
||
|
console.log("recordAudio():Audio Success");
|
||
|
},
|
||
|
|
||
|
// error callback
|
||
|
function(err) {
|
||
|
console.log("recordAudio():Audio Error: "+ err.code);
|
||
|
}
|
||
|
);
|
||
|
|
||
|
// Record audio
|
||
|
mediaRec.startRecord();
|
||
|
|
||
|
// Stop recording after 10 seconds
|
||
|
setTimeout(function() {
|
||
|
mediaRec.stopRecord();
|
||
|
}, 10000);
|
||
|
}
|
||
|
|
||
|
|
||
|
### Tizen Quirks
|
||
|
|
||
|
- Not supported on Tizen devices.
|
||
|
|
||
|
## MediaError
|
||
|
|
||
|
A `MediaError` object is returned to the `mediaError` callback
|
||
|
function when an error occurs.
|
||
|
|
||
|
### Properties
|
||
|
|
||
|
- __code__: One of the predefined error codes listed below.
|
||
|
|
||
|
- __message__: An error message describing the details of the error.
|
||
|
|
||
|
### Constants
|
||
|
|
||
|
- `MediaError.MEDIA_ERR_ABORTED` = 1
|
||
|
- `MediaError.MEDIA_ERR_NETWORK` = 2
|
||
|
- `MediaError.MEDIA_ERR_DECODE` = 3
|
||
|
- `MediaError.MEDIA_ERR_NONE_SUPPORTED` = 4
|