使用 MediaRecorder 写入缓冲区或 FIFO

2024-02-05

我正在开发一个低数据速率 VoIP 类型的项目。我需要以低数据速率捕获音频并将其存储在内部缓冲区或 FIFO 中(而不是文件中)。

我想使用低数据速率 .AMR 编码器,这意味着 AudioRecord 已经过时了。 MediaRecorder 看起来完全符合我的要求,只是它似乎写入文件。

MediaRecorder 采用 FileDescriptor...有什么方法可以编写一个实现 FileDescriptor 接口的类...充当字节同步...但不是将它们发送到文件,而是将它们存储在缓冲区中? FileDescriptor 上的文档明确指出应用程序不应该编写自己的应用程序,但为什么不呢?无论如何都可能吗?

http://docs.oracle.com/javase/1.4.2/docs/api/java/io/FileDescriptor.html http://docs.oracle.com/javase/1.4.2/docs/api/java/io/FileDescriptor.html

简而言之,我想开发自己的流,并欺骗 MediaRecorder 向其发送数据。也许会做一些棘手的事情,在同一个 APK 中打开套接字的两端并为 MediaRecorder 提供要写入的套接字?使用套接字作为我的 FIFO?我对此有点陌生,因此非常感谢任何帮助/建议。

我有一个关于 RX 方面的相关问题。我想要一个为 MediaPlayer 提供数据的缓冲区/fifo。我可以欺骗 MediaPlayer 接受来自我自己的专有流提供的缓冲区的数据吗?


我知道现在回答这个问题有点晚了...... ...但如果它有帮助的话,这就是解决方案。

Android 媒体记录器的方法setOutputFile()接受 FileDescriptor 作为参数。 至于您的需要,可以创建一个 unix 数据管道,并且可以通过以下方式将其 FD 作为参数传递...

mediaRecorder.setOutputFile(getPipeFD());

FileDescriptor getPipeFD()
{
    final String FUNCTION = "getPipeFD";
    FileDescriptor outputPipe = null;

    try
    {
        ParcelFileDescriptor[] pipe = ParcelFileDescriptor.createPipe();
        outputPipe = pipe[1].getFileDescriptor();
    }
    catch(Exception e)
    {
        Log.e(TAG, FUNCTION + " : " + e.getMessage());
    }

    return outputPipe;
}

The ParcelFileDescriptor.createPipe()创建一个 Unix 数据管道并返回 ParcelFileDescriptors 数组。第一个对象指管道的读通道(Source Channel),第二个对象指管道的写通道(Sink Channel)。使用MediaRecorder对象将记录的数据写入写入通道...

就 MediaPlayer 而言,可以使用相同的技术,将与创建的管道的读取通道相关的 FileDescriptor 对象传递给setDataSource()方法...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MediaRecorder 写入缓冲区或 FIFO 的相关文章

  • Android Room ORM:支持 SQLite 的自定义构建

    我需要使用 SQLite 的自定义构建 基于 sqlite org 版本https sqlite org android doc trunk www index wiki https sqlite org android doc trunk
  • 使用 ActiveAndroid 库存储 HashMap

    我有一堂课 Table name Control public class Control extends Model Column private String name Column private Map
  • GCM 无法唤醒设备

    我正在开发 GCM 应用程序 当设备不空闲时 即按电源按钮休眠 一切正常 但是 当我在设备空闲时发送消息时 设备不会唤醒 我做了以下事情 已验证服务器应用程序中的delay while idle未设置为true 每条消息使用不同的折叠键 多
  • Android模拟器中的互联网连接始终显示连接状态

    我尝试了多种方法来检查我的 Android 模拟器中的互联网连接 ConnectivityManager conMgr ConnectivityManager getSystemService Context CONNECTIVITY SE
  • 如何在android中获取MapView API?

    如何在android中获取MapView API thanks Android 文档中实际上是这么写的 你好 地图视图 http developer android com guide tutorials views hello mapvi
  • Android 从 C++ 端播放原始音频

    我需要能够在 Android 系统的 C 端以自定义文件格式传输音频 我正在致力于移植自定义媒体播放器 并且需要能够打开自定义文件并从中传输音频 这很重要 因为我认为从性能角度来看将整个播放器移植到 JAVA 是不可行的 并且通过 JNI
  • Auto-value-gson出现接口错误,注册一个InstanceCreator?

    我有一个如下所示的接口类 public interface Species String name And a Human实现的类 AutoValue使用类型适配器 AutoValue public abstract class Human
  • 片段内容下方是否存在持久性 BottomSheet?

    Using a 持久底表 https material google com components bottom sheets html bottom sheets persistent bottom sheets 在一个协调器布局 htt
  • 如何向 Android Studio 中的现有项目添加新活动?

    在 Eclipse 中 您只需单击 新建 按钮并选择 Android 活动即可添加新活动 但 Android Studio 有点不同 我无法找到如何向项目添加新活动 要添加一个Activity使用 Android Studio 此步骤与添加
  • 通知声音不适用于 api 10 android

    我用这个功能来显示状态notification 一切正常 但没有声音播放notification public void notifiction main String ticker String title String text int
  • 如何仅从 Firestore 获取最新更新的数据?

    在 Firestore 上发现任何更改时始终获取整个文档 如何只获取最近更新的数据 这是我的数据 我需要在第一次加载时在聊天中按对象顺序 例如 2018 09 17 30 40 msg和sendby 并且如果数据更新则仅获取新的msg和se
  • 将人类日期(当地时间 GMT)转​​换为日期

    我正在服务器上工作 服务器正在向我发送 GMT 本地日期的日期 例如Fri Jun 22 09 29 29 NPT 2018在字符串格式上 我将其转换为日期 如下所示 SimpleDateFormat simpleDateFormat ne
  • react-native android fontFamily 不生效

    问题一 我在index android js的欢迎样式中添加了fontFamily 但没有效果 fontFamily 真的可以在 Android 上使用吗 欢迎 字体大小 20 fontFamily roboto thin 文本对齐 居中
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • Android 为什么这不会抛出错误的线程异常?

    我的印象是视图只能从主线程操作 但是 为什么这不会崩溃 public class MainActivity extends Activity TextView tv Override protected void onCreate Bund
  • 在android中从SD卡上传图像到facebook

    我无法从 SD 卡上传 Facebook 上的图像 我使用了下面的代码 但它没有给我错误 但同时它没有上传图像 byte data null try FileInputStream fis new FileInputStream filep
  • 如何在android中安装和使用couch db

    我应该如何在 android 中安装和使用 couch Db 我的意思是本地沙发数据库 我可以在平板电脑和模拟器中使用它 为此我必须遵循哪些步骤 我目前正在开发一个使用它的项目 有两种选择 1 couchbase android 是的 co
  • ARM Chromebook 上的 Android 开发环境?

    我尝试了多次安装和使用安卓工作室 https developer android com studio index html on an ARM Chromebook C100P https archlinuxarm org platfor
  • 在线性布局内的 ScrollView 内并排对齐 TextView

    我有一个带有滚动视图的线性布局 我想保留它的当前格式 但只需将 textView2a 和 textView3a 并排放置 而不会破坏我当前的布局格式 我已经包含了我最近的尝试 但它们似乎不正确 提前致谢 Java菜鸟 当前有效的 XML
  • View.post(),以及当Runnables被执行时

    我最初的问题是需要知道我的根的高度和宽度View这样我就可以进行程序化的布局更改 就我的目的而言 我不一定需要在onCreate 对于我来说 以编程方式添加我的孩子就足够了View根布局完成后 因此我很乐意使用onWindowFocusCh

随机推荐

  • formGroup 需要一个 FormGroup 实例。请传一份

    情况 我正在尝试在我的 Ionic 2 应用程序中制作一个非常简单的登录表单 无论我尝试什么 我都会不断收到此错误 formGroup expects a FormGroup instance Please pass one in 代码 页
  • 使用命令行参数从 python 制作 exe 文件

    我想从使用命令行参数 argv 的 python 脚本创建一个 exe据我所知 py2exe 不支持命令行参数 我能做些什么 编辑 我使用的是 GUI2Exe 工具 所以我错过了控制台标志 但接受的答案是完全正确的 setup consol
  • PHP 正斜杠匹配

    PHP 中如何检查某个字符串是否包含正斜杠 检查是否出现strpos http php net manual en function strpos php if strpos string FALSE Found 以整数形式返回位置 如果未
  • 如何读取 git-ls-tree 输出的模式字段

    git ls tree fb3a8bdd0ce 100644 blob 63c918c667fa005ff12ad89437f2fdc80926e21c gitignore 100644 blob 5529b198e8d14decbe4ad
  • CSS 中类的通配符 *

    我有这些我正在设计的 div tocolor 但我还需要唯一标识符 1 2 3 4 等 因此我将其添加为另一个类tocolor 1 div class tocolor tocolor 1 tocolor 1 div div class to
  • 使用 C++ WinAPI 在 Windows 10 上设置亮度

    我正在尝试在 Windows 10 计算机上设置亮度 显示器好像不支持setMonitorBrightness and setDeviceGammaRamp改变伽玛 白点等 所以我尽量不使用它 我正在尝试使用它来使其工作IOCTL VIDE
  • SendGrid API 动态 - 无法取消订阅工作

    我刚刚使用 sendgrid 设置了一封动态电子邮件 并使用 API 根据我的客户数据填写它 除了取消订阅部分之外 我已经完成了所有工作 我的电子邮件底部有一个取消订阅块 在代码编辑器中 代码如下所示 div class module st
  • Spark Streaming 无法从单个文件读取流数据

    我正在尝试从使用 Spark 流 API textFileStream 连续附加的文本文件中读取流数据 但无法使用 Spark Streaming 读取连续数据 Spark中如何实现呢 这是预期的行为 为了基于文件的源 https spar
  • 如何检索每个轴上的 3D 旋转角度?

    我有一个 Model3DGroup 它使用应用于对象的 Transform 属性的 AxisAngleRotation3D 围绕任何 x y z 轴旋转 问题是我无法控制网格上应用的各种旋转 我需要在每个渲染循环的 x y z 轴上显示网格
  • 在chrome新版本上使用window.open显示base64 pdf数据

    我正在使用以下代码在新窗口中以 pdf 形式打开 Base64 数据 var pdf response data base64 var doc document createElement a doc href data applicati
  • Scala 中单例对象的解释

    我得到的编码是 您基本上提供了一个 object SomeClass 和一个 class SomeClass 并且伴随类是类声明 而对象是单例 http en wikipedia org wiki Singleton pattern 您无法
  • OpenCV。如何将点与矩阵相乘 (CvMat)

    我有用于旋转的矩阵 CvMat rot mat cvCreateMat 2 3 CV 32FC1 cv2DRotationMatrix center angle scale rot mat 该矩阵用于图像操作 cvWarpAffine ro
  • 如何使用 MySQL 和 PHP 比较一组数字并获得最相关的结果?

    考虑一下 set A 1 2 3 4 set B 3 4 5 6 set C 4 5 6 7 set D 1 我想将 D 与其余的进行比较 并得出一组最相关的数字 结果应按以下顺序排列 4 因为 D 与 A 有公共数 4 在 A 中 也在
  • 使用 JQuery 渲染部分视图时遇到问题

    我有一个如下所示的区域 以下是控制器操作 HttpGet public ActionResult Index partial return PartialView PartialPage1 HttpGet public ActionResu
  • 调试为什么我在 Apache 2.4 中收到“您没有访问权限”

    我正在尝试在 Linux Ubuntu 中创建本地环境 我已经安装了 Apache 2 4 7 使用 apt get 我已将 etc hosts 更改为 127 0 0 1 example dev 127 0 0 1 localhost 我
  • Azure cloud-init:无法安装包

    我有一个简单的 cloud init 文件 cloud config package upgrade true packages symlinks wget rsync git 但我的 Azure 失败 最后提供日志 这是我第一次在 Azu
  • 通过 Python 注释和取消注释 XML

    我想知道一种使用 Python 注释和取消注释 XML 中的元素的方法
  • 创建 Maven ArcheType 。设置文件名

    我想创建一个原型 用户可以在其中提供artifactId 然后我想拿这个artifactId并创建两个文件 这是一个例子 artifactId box FILE 1 copy box txt FILE 2 Box java 创造copy b
  • 项目符号列表行之间的间距

    如何设置项目符号列表之间的间距 asdfasdf asdf23223 我想在第一行和第二行之间留出更多空间 例如 ul li asdfasdf li p p li asdf23223 li ul Add top and bottom填充到l
  • 使用 MediaRecorder 写入缓冲区或 FIFO

    我正在开发一个低数据速率 VoIP 类型的项目 我需要以低数据速率捕获音频并将其存储在内部缓冲区或 FIFO 中 而不是文件中 我想使用低数据速率 AMR 编码器 这意味着 AudioRecord 已经过时了 MediaRecorder 看