Android 中的 MediaRecorder 和 UDP (DatagramSocket)

发布于 2024-10-02 12:17:04 字数 406 浏览 7 评论 0原文

我目前正在编写一个 VoIP 客户端程序。我正在尝试在两个客户端之间建立连接并发送和接收从麦克风记录的数据。

我当前正在使用文件,但它看起来是一个糟糕的实现:

记录器开始记录到临时文件。计时器启动,停止记录器,查看文件大小,然后使用 DatagramPacket 发送内容。

看起来很糟糕。我想知道 MediaRecorder 和 MediaPlayer 类是否有办法分别采用 UPD 套接字作为文件输出和输入(即 DatagramSocket)。

我可以使用套接字中的文件描述符,但套接字使用 TCP。我想使用 UDP,所以我猜是 DatagramSocket,但我似乎找不到在我的 MediaRecorder 和 MediaPlayer 类中使用它的方法。

请问有人对此有好的解决方案吗?

非常感谢

I am currently writing a program that is a sort of VoIP client. I am trying to establish a connection between 2 clients and send and receive data, that is recorded from microphone.

I am currently using files but it looks like an awful implementation:

The recorder starts recording to a temporary file. A timer kicks in, stop the recorder, look at the file size, to then send the content using a DatagramPacket.

It seems awfully bad. I wonder if the MediaRecorder and MediaPlayer class have a way to take a UPD socket as it's file output and input respectively (that is, a DatagramSocket).

I can use a file descriptor from a socket, but sockets uses TCP. I wanted to use UDP, so I guess DatagramSocket, but I can't seem to find a way to use it in my MediaRecorder and MediaPlayer class.

Does anyone please have a good solution for this?

Thank you very much

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你怎么这么可爱啊 2024-10-09 12:17:04

您可能对 ParcelFileDescriptor 感兴趣,特别是 fromDatagramSocket(...) 函数,然后您可以使用 getFileDescriptor 函数来设置播放器的数据源

*更新:这仅在您有 android 4.0 或更高版本时有效:请参阅 api 限制

You are probably interested in a ParcelFileDescriptor, and then specifically the fromDatagramSocket(...) function, then you could use the getFileDescriptor function to set the Datasource of the player

*update: this only works offcourse if you have android 4.0 or higher: see the api limit

蛮可爱 2024-10-09 12:17:04

所有,

实现此目的的一种方法是实现第二个线程,在抽象空间(UNIX 命名套接字)中设置 LocalServerSocket。然后在第一个线程中创建一个连接到 LocalServerSocket 的 LocalSocket。经过这一步,就可以在第一个线程中获取LocalSocket的FileDescriptor,并将其设置为MediaRecorder的OutputFile。在第二个线程中,您只需从剥离的 LocalSocket 中读取数据,然后写入 DatagramSocket 中。埃兹 Pz。

祝你好运,
B-辐射

All,

One way you can do this is by implementing a second thread that sets up a LocalServerSocket in the abstract space (UNIX named socket). In the first thread you then create a LocalSocket that connects to the LocalServerSocket. After this step, you can obtain the FileDescriptor of the LocalSocket in the first thread, and set this as the OutputFile for MediaRecorder. In the second thread you just read from the peeled-off LocalSocket, and then write into your DatagramSocket. Ez Pz.

Good luck,
B-Rad

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文