---
title: 媒体
header: develop
nav: api
sidebar: media
---

图片
-----

### chooseImage

**解释：**从本地相册选择图片或使用相机拍照。

**参数：**Object

**Object参数说明：**

|参数 | 类型  |必填 | 说明|
|---- | ---- | ---- | ----|
|count  | Number | 否  | 最多可以选择的图片张数，默认 9|
|sizeType  |  String Array| 否  | original 原图，compressed 压缩图，默认二者都有|
|sourceType | String Array |否 |  album 从相册选图，camera 使用相机，默认二者都有|
|success |Function  |  是 | 成功则返回图片的本地文件路径列表 tempFilePaths|
|fail  |  Function |   否  | 接口调用失败的回调函数|
|complete   | Function  |  否 |  接口调用结束的回调函数（调用成功、失败都会执行）|

**注意：文件的临时路径，在智能小程序本次启动期间可以正常使用，如需持久保存，需在主动调用 swan.saveFile，在智能小程序下次启动时才能访问得到。**


**success返回参数说明：**

|参数  |类型|  说明 |
|---- | ---- | ---- |
|tempFilePaths  | String Array |图片的本地文件路径列表 |
|tempFiles  | Object Array |图片的本地文件列表，每一项是一个 File 对象|

**tempFiles 对象结构如下:**

|字段 | 类型  |说明|
|---- | ---- | ---- |
|path  |  String  |本地文件路径|
|size   | Number | 本地文件大小（单位：B）|


**示例：**

```js
swan.chooseImage({
    count: 1,
    success: function (res) {
        // 成功则返回图片的本地文件路径列表 tempFilePaths
        console.log(res.tempFilePaths);
        // 文件列表对象
        console.log(res.tempFiles);
    },
    fail: function (err) {
        console.log('错误码：' + err.errCode);
        console.log('错误信息：' + err.errMsg);
    }
});

```

### previewImage

**解释：**预览图片。

**参数：**Object

**Object参数说明：**

|参数 | 类型 | 必填  |说明|
|---- | ---- | ---- | ----|
|current |String | 否  | 当前显示图片的链接，不填则默认为 urls 的第一张|
|urls   | String Array |是 |  需要预览的图片链接列表|
|success| Function |   否  | 接口调用成功的回调函数|
|fail  |  Function  |  否 |  接口调用失败的回调函数|
|complete  |  Function  |  否 |  接口调用结束的回调函数（调用成功、失败都会执行）|


**示例：**

```js
swan.previewImage({
    current: '', // 当前显示图片的http链接
    urls: [], // 需要预览的图片http链接列表
    fail: function (err) {
        console.log('错误码：' + err.errCode);
        console.log('错误信息：' + err.errMsg);
    }
});
```

**Bug & Tip**

1、bug: 开发者工具 1.8.0 current 参数为当前显示图片的索引值。

### getImageInfo

**解释：**获取图片信息。

**参数：**Object

**Object参数说明：**

|参数  |类型|  必填 | 说明|
|---- | ---- | ---- | ----|
|src |String | 是  | 图片的路径，可以是相对路径、临时文件路径或存储文件路径,不支持网络图片|
|success| Function  |  否  | 接口调用成功的回调函数|
|fail  |  Function  |  否  | 接口调用失败的回调函数|
|complete |   Function |   否  | 接口调用结束的回调函数（调用成功、失败都会执行）|

**success返回参数说明：**

|参数  |类型 | 说明|
|---- | ---- | ---- |
|width |  Number | 图片宽度（单位：px）|
|height | Number | 图片高度（单位：px）|
|path  |  String | 返回图片的本地路径|


**示例：**


```js
swan.getImageInfo({
    src: '/xxx/xxx.jpg',
    success: function (res) {
        // 成功则返回图片高，宽，本地路径
        console.log(res.width);
        console.log(res.height);
        console.log(res.path);
    },
    fail: function (err) {
        console.log('错误码：' + err.errCode);
        console.log('错误信息：' + err.errMsg);
    }
});

```

### saveImageToPhotosAlbum

**解释：**保存图片到系统相册。需要用户授权

**参数：**Object

**Object参数说明：**

|参数名| 类型 | 必填 | 说明|
|---- | ---- | ---- |---- |
|filePath  |  String  |是 |  图片文件路径，可以是临时文件路径也可以是永久文件路径，不支持网络图片路径|
|success |Function |   否  | 接口调用成功的回调函数|
|fail  |  Function  |  否  | 接口调用失败的回调函数|
|complete |   Function |   否  | 接口调用结束的回调函数（调用成功、失败都会执行）|


**success返回参数说明：**

|参数名| 类型|  说明|
|---- | ---- | ---- |
|errMsg  |String | 调用结果|


**示例：**

```js
swan.saveImageToPhotosAlbum({
    'filePath': '/xxx/xxx.jpg',
    success: function (res) {
        // 成功则返回图片本地路径
        console.log(res.filePath);
    },
    fail: function (err) {
        console.log('错误码：' + err.errCode);
        console.log('错误信息：' + err.errMsg);
    }
});
```

录音管理
-----

### getRecorderManager

**解释：**获取全局唯一的录音管理器`recorderManager`。

**参数：**无

**recorderManager 对象的方法列表：**

|方法 | 参数 | 说明 |
|---- | ---- | ---- |
|start | options | 开始录音 |
|pause | | 暂停录音 |
|resume | | 继续录音 |
|stop | | 停止录音 |
|onStart | callback | 录音开始事件 |
|onPause | callback | 录音暂停事件 |
|onStop | callback | 录音停止事件，会回调文件地址 |
|onError | callback | 录音错误事件, 会回调错误信息 |

**start(options) 说明：**

|属性 | 类型 | 必填 | 说明 |
|---- | ---- | ---- | ---- |
|duration |Number | 否 | 指定录音的时长，（单位：ms） ，如果传入了合法的 duration ，在到达指定的 duration 后会自动停止录音，最大值 600000（10 分钟）,默认值 60000（1 分钟）|
|sampleRate |Number |否 | 采样率，有效值 8000/16000/44100 |
|numberOfChannels |Number |否 | 录音通道数，有效值 1/2 |
|encodeBitRate |Number |否 | 编码码率，有效值见下表格 |
|format |String |否 | 音频格式，有效值 aac/pcm |

**其中，采样率和码率有一定要求，具体有效值如下：**

|采样率 | 编码码率 |
|---- | ---- |
|8000 | 16000 ~ 48000|
|16000| 24000 ~ 96000|
|44100| 64000 ~ 320000|

**onStop(callback) 回调结果说明：**

|属性 | 类型 | 说明 |
|---- | ---- | ---- |
|tempFilePath |String | 录音文件的临时路径 |

**onError(callback) 回调结果说明：**

|属性 | 类型 | 说明 |
|---- | ---- | ---- |
|errMsg |String | 错误信息 |

**示例：**

```javascript
const recorderManager = swan.getRecorderManager()

recorderManager.onStart(function() {
    // 开始录音事件
    console.log('recorder start')
});
recorderManager.onPause(function() {
    // 暂停录音事件
    console.log('recorder pause')
});
recorderManager.onStop(function() {
    // 停止录音事件
    console.log('recorder stop', res)
    const { tempFilePath } = res
});

const options = {
    duration: 10000,
    sampleRate: 44100,
    numberOfChannels: 1,
    encodeBitRate: 192000,
    format: 'aac'
};

recorderManager.start(options);

```

背景音频管理播放
-----

### getBackgroundAudioManager

**解释：**获取全局唯一的背景音频管理器 `backgroundAudioManager`。

**参数：**无

**backgroundAudioManager 对象的属性列表：**

|属性 | 类型 | 说明 | 只读 |
|---- | ---- | ---- | ---- |
|src |String | 音频的数据链接，用于直接播放。| 否 |
|startTime |Number | 开始播放的位置（单位：s），默认 0 | 否 |
|autoplay |Boolean| 是否自动开始播放，默认 false | 否 |
|loop |Boolean |是否循环播放，默认 false | 否 |
|duration |Number |当前音频的长度（单位：s），只有在当前有合法的 src 时返回 | 是 |
|currentTime |Number |当前音频的播放位置（单位：s），只有在当前有合法的 src 时返回，时间不取整，保留小数点后 6 位 | 是 |
|paused |Boolean |当前是否暂停或停止状态，true 表示暂停或停止，false 表示正在播放 | 是 |
|buffered |Number |音频缓冲的时间点，仅保证当前播放时间点到此时间点内容已缓冲。 | 是 |
|title |String |音频标题，用于做原生音频播放器音频标题。原生音频播放器中的分享功能，分享出去的卡片标题，也将使用该值。 | 否 |
|epname |String |专辑名，原生音频播放器中的分享功能，分享出去的卡片简介，也将使用该值。 | 否 |
|singer |String |歌手名，原生音频播放器中的分享功能，分享出去的卡片简介，也将使用该值。 | 否 |
|coverImgUrl |String |封面图url，用于做原生音频播放器背景图。原生音频播放器中的分享功能，分享出去的卡片配图及背景也将使用该图。 | 否 |

**backgroundAudioManager 对象的方法列表：**

|方法 | 参数 | 说明 |
|---- | ---- | ---- |
|play | 无 | 播放 |
|pause | 无 | 暂停 |
|stop | 无 | 停止 |
|seek | position | 跳转到指定位置（单位：s） |
|onCanplay | callback | 音频进入可以播放状态，但不保证后面可以流畅播放 |
|onPlay | callback | 音频播放事件 |
|onPause | callback | 音频暂停事件 |
|onStop | callback | 音频停止事件 |
|onEnded | callback | 音频自然播放结束事件 |
|onTimeUpdate | callback | 音频进度更新事件 |
|onError | callback | 音频播放错误事件 |
|onPrev | callback | 用户在系统音乐播放面板点击上一曲事件（iOS only） |
|onNext | callback | 用户在系统音乐播放面板点击下一曲事件（iOS only）|
|onWaiting | callback | 音频加载中事件，当音频因为数据不足，需要停下来加载时会触发 |

**示例：**

```javascript

const backgroundAudioManager = swan.getBackgroundAudioManager();

backgroundAudioManager.title = '此时此刻';
backgroundAudioManager.epname = '此时此刻';
backgroundAudioManager.singer = '许巍';
backgroundAudioManager.coverImgUrl = 'xxx';
backgroundAudioManager.src = 'xxx';

```

音频组件控制
-----

### createInnerAudioContext

**解释：**创建并返回内部 audio 上下文 `innerAudioContext` 对象。

**参数：**无

**innerAudioContext 对象的属性列表：**

|方法 | 参数 | 说明 | 只读 |
|---- | ---- | ---- | ---- |
|src |String | 音频的数据链接，用于直接播放。| 否 |
|startTime |Number | 开始播放的位置（单位：s），默认 0 | 否 |
|autoplay |Boolean| 是否自动开始播放，默认 false | 否 |
|loop |Boolean |是否循环播放，默认 false | 否 |
|duration |Number |当前音频的长度（单位：s），只有在当前有合法的 src 时返回 | 是 |
|currentTime |Number |当前音频的播放位置（单位：s），只有在当前有合法的 src 时返回，时间不取整，保留小数点后 6 位 | 是 |
|paused |Boolean |当前是是否暂停或停止状态，true 表示暂停或停止，false 表示正在播放 | 是 |
|buffered |Number |音频缓冲的时间点，仅保证当前播放时间点到此时间点内容已缓冲。 | 是 |
|volume |Number |音量。范围 0~1。 | 否 |

**innerAudioContext 对象的方法列表：**

|方法 | 参数 | 说明 |
|---- | ---- | ---- |
|play | 无 | 播放 |
|pause | 无 | 暂停 |
|stop | 无 | 停止 |
|seek | position | 跳转到指定位置（单位：s）|
|destroy | 无 | 销毁当前实例 |
|onCanplay | callback | 音频进入可以播放状态，但不保证后面可以流畅播放 |
|onPlay | callback | 音频播放事件 |
|onPause | callback | 音频暂停事件 |
|onStop | callback | 音频停止事件 |
|onEnded | callback | 音频自然播放结束事件 |
|onTimeUpdate | callback | 音频进度更新事件 |
|onError | callback | 音频播放错误事件 |
|onWaiting | callback | 音频加载中事件，当音频因为数据不足，需要停下来加载时会触发 |
|onSeeking | callback | 音频进行 seek 操作事件 |
|onSeeked | callback | 音频完成 seek 操作事件 |

**示例：**

```javascript

const innerAudioContext = swan.createInnerAudioContext();
innerAudioContext.src = 'xxx';
innerAudioContext.autoplay = true;
innerAudioContext.seek({
    position: 10
});
innerAudioContext.onPlay(function (res) {
    console.log('开始播放')
});

```

视频
-----

### chooseVideo

**解释：**拍摄视频或从手机相册中选视频，返回视频的临时文件路径。

**参数：**Object

**Object参数说明：**

|参数 | 类型  |必填 | 说明|
|---- | ---- | ---- | ----|
|sourceType | String Array |否 |  album 从相册选图，camera 使用相机，默认二者都有|
|compressed  | Boolean | 否  | 是否压缩所选的视频源文件，默认值为true，需要压缩|
|maxDuration  | Number | 否  | 拍摄视频最长拍摄时间，（单位：s）。最长支持 60 秒|
|success |Function  |  是 | 接口调用成功，返回视频文件的临时文件路径，详见返回参数说明|
|fail  |  Function |   否  | 接口调用失败的回调函数|
|complete   | Function  |  否 |  接口调用结束的回调函数（调用成功、失败都会执行）|

**success返回参数说明：**


|参数  |  说明 |
|---- | ---- |
|tempFilePath | 选定视频的临时文件路径 |
|duration | 选定视频的时间长度 (单位：s)|
|size | 选定视频的数据量大小（单位：B）|
|height | 返回选定视频的长 |
|width | 返回选定视频的宽 |

**注：文件的临时路径，在智能小程序本次启动期间可以正常使用，如需持久保存，需在主动调用 swan.saveFile，在智能小程序下次启动时才能访问得到。**

**示例：**

```html
<button bind:tap="chooseVideo" type="primary">点击选择视频</button>
<video src="{{src}}" controls></video>
```

```javascript
Page({
    data: {
        sourceType: ['album', 'camera'],
        compressed: false,
        maxDuration: 60,
        src: ''
    },

    chooseVideo() {
        let self = this;
        swan.chooseVideo({
            sourceType: this.getData('sourceType'),
            compressed: this.getData('compressed'),
            maxDuration: this.getData('maxDuration'),
            success: function (res) {
                // 成功返回选定视频的临时文件路径
                self.setData('src', res.tempFilePath);
            },
            fail: function (err) {
                console.log('错误码：' + err.errCode);
                console.log('错误信息：' + err.errMsg);
            }
        });
    }
});
```

### saveVideoToPhotosAlbum

**解释：**保存视频到系统相册。需要用户授权。

**参数：**Object

**Object参数说明：**

|参数名| 类型 | 必填 | 说明|
|---- | ---- | ---- |---- |
|filePath  |  String  |是 |  视频文件路径，可以是临时文件路径也可以是永久文件路径|
|success |Function |   否  | 接口调用成功的回调函数|
|fail  |  Function  |  否  | 接口调用失败的回调函数|
|complete |   Function |   否  | 接口调用结束的回调函数（调用成功、失败都会执行）|

**success返回参数说明：**

|参数名| 类型|  说明|
|---- | ---- | ---- |
|errMsg  |String | 调用结果|


**示例：**

```js
swan.saveVideoToPhotosAlbum({
    'filePath': 'bdfile://xxx',
    success: function (res) {
        // 成功返回视频文件路径
        console.log(res.filePath);
    },
    fail: function (err) {
        console.log('错误码：' + err.errCode);
        console.log('错误信息：' + err.errMsg);
    }
});
```

视频组件控制
-----

### createVideoContext

**解释：**创建并返回 video 上下文 `videoContext` 对象。通过 videoId 跟一个 video 组件绑定，通过它可以操作一个 video 组件。

**参数：**videoId

**videoContext 对象的方法列表：**

|方法 | 参数 | 说明 |
|---- | ---- | ---- |
|play  |  无 |  播放  |
|pause |  无  | 暂停  |
|seek  |  position   | 跳转到指定位置（单位：s）    |
|sendDanmu |  danmu  | 发送弹幕，danmu 包含两个属性 text、color。  |
|requestFullScreen  | 无  | 进入全屏  |
|exitFullScreen | 无 |  退出全屏|

**示例：**

```html
<view>
    <video id="myVideo" src="https://example.baidu.com/xxxx"></video>
</view>
```
```js
const myVideo = swan.createVideoContext('myVideo');
myVideo.play();
```
直播组件控制
-----

### createLivePlayerContext

**解释：**操作对应的 `<live-player/>` 组件。 创建并返回 live-player 上下文 LivePlayerContext 对象。

**参数：**domId

**livePlayerContext 对象的方法列表：**

|方法 | 参数 | 说明|
|---- | ---- | ---- |
|play |Object | 播放  |
|stop |Object | 停止  |
|mute |Object| 静音 |
|requestFullScreen | Object |进入全屏|
|exitFullScreen| Object | 退出全屏|

**requestFullScreen 的 Object 参数列表：**

|参数名 |类型  |必填  |说明|
|---- | ---- | ---- |---- |
|direction |Number  |  是  | 有效值为 0（正常竖向）, 90（屏幕逆时针90度）, -90（屏幕顺时针90度）|
|success   |Function  |  否  | 接口调用成功的回调函数|
|fail  |Function  |  否 |  接口调用失败的回调函数|
|complete   | Function   | 否 |  接口调用结束的回调函数（调用成功、失败都会执行）|

**其他方法的 Object 参数列表：**

|参数名 |类型  |必填  |说明|
|---- | ---- | ---- |---- |
|success   |Function  |  否  | 接口调用成功的回调函数|
|fail  |Function  |  否 |  接口调用失败的回调函数|
|complete   | Function   | 否 |  接口调用结束的回调函数（调用成功、失败都会执行）|

相机组件控制
-----

### createCameraContext

**解释：**创建并返回 camera 上下文 `cameraContext`对象，cameraContext 与页面的 camera 组件绑定，一个页面只能有一个 camera，通过它可以操作对应的组件

**参数：**无

**cameraContext 对象的方法列表：**

|方法 | 参数  |说明|
|---- | ---- | ---- |
|takePhoto |  Object|  拍照，可指定质量，成功则返回图片|
|startRecord |Object  |开始录像|
|stopRecord | Object | 结束录像，成功则返回封面与视频|


**takePhoto 的 Object 参数列表：**

|参数  |类型 | 必填 | 说明|
|---- | ---- | ---- |---- |
|quality |String  |否  | 成像质量，值为high, normal, low，默认normal|
|success| Function |   否  | 接口调用成功的回调函数 ，res = { tempImagePath }|
|fail  |  Function  |  否 |  接口调用失败的回调函数|
|complete |   Function  |  否  | 接口调用结束的回调函数（调用成功、失败都会执行）|


**startRecord 的 Object 参数列表：**

|参数 | 类型 | 必填 | 说明|
|---- | ---- | ---- |---- |
|success |Function  |  否 |  接口调用成功的回调函数|
|fail  |  Function |   否  | 接口调用失败的回调函数|
|complete   | Function |   否  | 接口调用结束的回调函数（调用成功、失败都会执行）|


**stopRecord 的 Object 参数列表：**

|参数 | 类型  |必填  |说明|
|---- | ---- | ---- |---- |
|success |Function   | 否  | 接口调用成功的回调函数 ，res = { tempThumbPath, tempVideoPath }|
|fail |   Function |   否  | 接口调用失败的回调函数|
|complete   | Function   | 否  | 接口调用结束的回调函数（调用成功、失败都会执行）|


