2010-11-14 23 views
5

Tôi hiện đang viết một chương trình là một loại ứng dụng khách VoIP. Tôi đang cố gắng thiết lập kết nối giữa 2 khách hàng và gửi và nhận dữ liệu, được ghi lại từ micrô.MediaRecorder và UDP (DatagramSocket) trong Android

Tôi hiện đang sử dụng tệp nhưng có vẻ như triển khai khủng khiếp:

Máy ghi bắt đầu ghi vào tệp tạm thời. Một bộ đếm thời gian khởi động, dừng máy ghi âm, nhìn vào kích thước tập tin, sau đó gửi nội dung bằng cách sử dụng một gói dữ liệu.

Dường như quá tệ. Tôi tự hỏi nếu lớp MediaRecorder và MediaPlayer có một cách để có một ổ cắm UPD vì nó là đầu ra tập tin và đầu vào tương ứng (có nghĩa là, một DatagramSocket).

Tôi có thể sử dụng bộ mô tả tệp từ ổ cắm, nhưng ổ cắm sử dụng TCP. Tôi muốn sử dụng UDP, vì vậy tôi đoán DatagramSocket, nhưng tôi dường như không thể tìm cách sử dụng nó trong lớp MediaRecorder và MediaPlayer của tôi.

Có ai vui lòng có giải pháp tốt cho việc này không?

Thank you very much

Trả lời

0

All,

Một cách để bạn có thể làm điều này là bằng cách thực hiện một sợi thứ hai thành lập một LocalServerSocket trong không gian trừu tượng (UNIX tên socket). Trong chuỗi đầu tiên bạn tạo một LocalSocket kết nối với LocalServerSocket. Sau bước này, bạn có thể lấy FileDescriptor của LocalSocket trong chuỗi đầu tiên, và đặt nó làm OutputFile cho MediaRecorder. Trong chuỗi thứ hai bạn chỉ cần đọc từ LocalSocket bóc vỏ, và sau đó ghi vào DatagramSocket của bạn. Ez Pz.

Chúc may mắn, B-Rad

+0

Điều này hoàn toàn sai! Bạn phải mã hóa dữ liệu vào một luồng, không được hỗ trợ bởi Android. --- Bạn chính xác rằng bạn có thể chỉ đơn giản là nổ ra các khung hình trên UDP, nhưng đó không phải là một luồng, đó là những khung hình thô (video/âm thanh)! – debracey

3

Bạn đang có lẽ quan tâm đến một ParcelFileDescriptor, và sau đó đặc biệt là fromDatagramSocket(...) chức năng, sau đó bạn có thể sử dụng chức năng getFileDescriptor để thiết lập Datasource của các cầu thủ

* cập nhật : điều này chỉ hoạt động offcourse nếu bạn có android 4.0 trở lên: xem giới hạn api