【问题标题】:Cordova 3.3 Pause and Resume recording using Media APICordova 3.3 使用 Media API 暂停和恢复录制
【发布时间】:2014-02-18 06:06:41
【问题描述】:

我正在使用 Cordova 的 Media API 为 iOS 5.0+ 制作一个简单的记录器。我让用户能够开始-暂停-恢复-停止录制音频。

我定义的三个按钮是

开始录制

停止录制

暂停/恢复录制

我能够成功开始和停止录制。我无法做的是暂停录音,然后重新开始。

我提到了 Cordova 的 Media API examples,并且在我的代码中也使用了一些。

请帮忙!!!

【问题讨论】:

  • 我认为没有pauseRecord() 方法...您可能不得不自己编写这个作为附加插件或破解原始插件。您还可以使用 Capture API 来调出设备的本机录音应用程序,该应用程序可能具有 pauseRecord 功能:github.com/apache/cordova-plugin-media-capture/blob/master/doc/…
  • 我的应用程序要求是我不能使用本机记录器。我必须为录音机使用自定义 UI,这就是我使用 Media API 的原因
  • 我认为您将不得不创建自己的插件或扩展媒体插件。尽管快速的 google-fu 似乎表明您无论如何都无法在 Android 中暂停/恢复录音 - 不确定 iOS。您可能需要通过开始/停止录制来解决问题。
  • 谢谢@MBillau。您的建议奏效了,我扩展了媒体插件以使用记录器的暂停和恢复功能。我也添加了一个答案。如果您认为它有帮助,请支持我的问题和答案。

标签: ios cordova phonegap-plugins audio-recording cordova-3


【解决方案1】:

通过扩展 Media API 插件,我能够使用 Media API 调用记录器的暂停和恢复功能。

以下是相同的解决方案:

媒体 API 插件的原生部分

将以下方法添加到CDVSound.m

CDVSound.m

- (void)resumeRecordingAudio:(CDVInvokedUrlCommand*)command
 {
    NSString* mediaId = [command.arguments objectAtIndex:0];

    CDVAudioFile* audioFile = [[self soundCache] objectForKey:mediaId];
    NSString* jsString = nil;

    if ((audioFile != nil) && (audioFile.recorder != nil)) {
        NSLog(@"Resumed recording audio sample '%@'", audioFile.resourcePath);
        [audioFile.recorder record];
        // no callback - that will happen in audioRecorderDidFinishRecording
    }
    // ignore if no media recording
    if (jsString) {
        [self.commandDelegate evalJs:jsString];
    }
}

- (void)pauseRecordingAudio:(CDVInvokedUrlCommand*)command
 {
    NSString* mediaId = [command.arguments objectAtIndex:0];

    CDVAudioFile* audioFile = [[self soundCache] objectForKey:mediaId];
    NSString* jsString = nil;

    if ((audioFile != nil) && (audioFile.recorder != nil)) {
        NSLog(@"Paused recording audio sample '%@'", audioFile.resourcePath);
        [audioFile.recorder pause];
        // no callback - that will happen in audioRecorderDidFinishRecording
    }
    // ignore if no media recording
    if (jsString) {
        [self.commandDelegate evalJs:jsString];
    }
}

媒体 API 插件的 JAVASCRIPT 部分

将以下代码添加到org.apache.cordova.mediawww文件夹下的Media.js文件中。

确保在 Media.prototype.startRecord 函数下方添加代码。

/**
 * Pause recording audio file.
 */
Media.prototype.pauseRecord = function() {
exec(null, this.errorCallback, "Media", "pauseRecordingAudio", [this.id]);
};

/**
* Resume recording audio file.
*/
Media.prototype.resumeRecord = function() {
exec(null, this.errorCallback, "Media", "resumeRecordingAudio", [this.id]);
};

一旦你扩展了插件,你只需要调用 nameOfRecorder.pauseRecord();和 nameOfRecorder.resumeRecord();根据您的需要和要求。

PS:我正在使用带有 XCode 5.0.2 的 Cordova 3.3

希望这会有所帮助。

【讨论】:

  • 这对我也很有帮助。顺便说一句,有安卓插件的解决方案吗?
  • @WangYinXing 很抱歉,我还没有在 Android 上尝试过。另外,在过去的几个月里,我不喜欢混合开发。
猜你喜欢
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 2012-07-24
  • 1970-01-01
相关资源
最近更新 更多