2011-01-09 26 views
6

Tôi đang cố tải luồng video từ điểm A (2.1 điện thoại Android) đến điểm B (máy chủ của tôi) trong thời gian thực. Tôi sẽ làm như thế nào? chi tiết dưới đây là những nỗ lực của tôi (một ít lâu, nhưng súc tích!)phát tệp MediaRecorder trong khi đang ghi


Mục đích là để có được một đoạn video dài giờ ghi với điện thoại đến máy chủ mà không cần tạm dừng/dừng dòng. một sự chậm trễ lên đến vài phút không phải là một vấn đề. Tôi đã thử ba cách tiếp cận

  1. chủ đề một FileInputStream mà đọc từ đặc tả tập tin của video điểm đến
  2. gọi MediaRecoder.setOutputFile trên các FD của một 'người gửi' socket. Ổ cắm này kết nối với LocalSocketServer, có đích là ổ cắm 'máy thu'.
  3. mở một socket để máy chủ của tôi và cho setOutputFile nó FD

không may cả hai nỗ lực đã thất bại.

  1. Chỉ đăng ký 24 byte bất cứ khi nào tôi gọi FileInputStream.available(), và con số thực tế của byte chỉ sau khi tôi gọi Recorder.stop()
  2. mang lại cho tôi đẹp vô dụng stacktrace này

    ERROR/AndroidRuntime (18532): Gây ra bởi: java.lang.RuntimeException: bắt đầu thất bại. LỖI/AndroidRuntime (18.532): tại android.media.MediaRecorder.start (Native Method) LỖI/AndroidRuntime (18.532): tại com.example.demovideo.DemoVideo.initializeCamera (...) ...

  3. cùng lỗi 2

đoạn mã (phần bỏ đi)

1)

fileOut = new FileOutputStream(pathToFile); 
... 
recorder.setOutputFile(fileOut.getFD()); 
recorder.prepare() 
recorder.start() 

// in an Async Thread 
fileIn = FileInputStream(fileOut.getFD); 
while (recording) { 
    fos.flush(); 
    Log.w("---", "bytesAvailable: " + fileIn.available()); //always returns 24 
    Thread.sleep(1000); 
} 

2)

// in a Thread 
server = new LocalServerSocket(SOCKET_ADDRESS); 
    while (true){ 
     receiver = server.accept(); 
     if (receiver != null){ 
     InputStream input = receiver.getInputStream(); 
      ... // processing would go here 
    } } 

sender = new LocalSocket(); 
sender.connect(new LocalSocketAddress(SOCKET_ADDRESS)); 
recorder.setOutputFile(sender.getFileDescriptor()); 
... 
recorder.prepare(); 
recorder.start(); // <- error 
  1. đúng cách tiết kiệm một video uncorrupted để sd
  2. công trình nếu tôi sử dụng setOutputFile (pathToFile) để thay thế. ổ cắm cũng làm việc khi tôi chạy sender.getOutputStream().write(message.getBytes());
+0

Tôi đang cố gắng triển khai cùng chức năng. Nhưng tôi không nhận được phương pháp của bạn. Bạn thiết lập recorder.setOutputFile hai lần: một lần vào một tập tin, cái kia vào một ổ cắm. Tôi nghĩ rằng máy ghi âm sẽ làm việc với fileID mới bất cứ khi nào bạn thay đổi, thay vì với nhiều fileID. – user1914692

+0

1) và 2) là hai ví dụ riêng biệt – ebaum

+0

Nếu chúng tách biệt, thì làm cách nào để bạn triển khai hai tác vụ cùng một lúc? Trên thực tế, nếu bạn làm hai nhiệm vụ riêng biệt, nó sẽ là một vấn đề khó khăn. Đối với tác vụ truyền trực tuyến, hãy xem Spydroid-ipcamera trong code.google – user1914692

Trả lời

2
  1. Tôi tạo ra một video di động đến máy chủ trực tuyến ứng dụng với cách tiếp cận này và nó đã làm việc. Vì vậy, đây nên là cách tiếp cận đúng. Sau này khi tôi không tham gia dự án nữa, tôi nhận được báo cáo rằng cách tiếp cận này không hoạt động với một số điện thoại mới hơn - đáng chú ý nhất là Samsung Galaxy S. Vấn đề là điện thoại này đã tiết kiệm dữ liệu video một cách tiết kiệm, chỉ một lần một phút. Bạn đang sử dụng điện thoại nào để kiểm tra điều này?

  2. & 3. MediaRecorder là trình bao bọc quanh thư viện gốc. Tôi cho rằng thư viện này muốn một tập tin cụ thể để viết cho không phải là một đường ống. Trên các tệp cấp hệ thống tệp & các ống trông giống nhau, nhưng không thể có quyền truy cập ngẫu nhiên vào đường ống (tìm kiếm).

+0

Tôi đang sử dụng ... galaxy S. Tôi không thấy điều này sắp tới, cảm ơn bạn đã nắm bắt! Nếu tôi đã thiết lập ổ cắm máy thu để xuất ra một tệp, có thể 2 hoặc 3 hoạt động không? – ebaum

+0

Xin chào, tôi cũng đang cố gắng làm điều tương tự ... Bạn có cơ hội thử trên điện thoại Huawei IDEOS hoặc HTC G1 không? Nếu không, tôi có thể truy cập APK và thử nghiệm không? Cảm ơn. – Rob

+0

Nó đã hoạt động trên G1 tại thời điểm đó (khoảng 1,5 năm trước), không biết về điện thoại kia. Gói ứng dụng trên www.livecliq.net. Tôi không biết về tình trạng hiện tại của dự án. –

Các vấn đề liên quan