Điều tôi muốn là broadcast
một video camera Android đến các địa điểm ở xa, để mọi người xem video đó trên thiết bị di động hoặc trang web của họ. Tôi đã thành công với unicast
nó vào trình phát vlc trên máy của tôi. Tôi đã thử máy chủ red5
, Adobe media server
, ffmpeg
máy chủ nhưng tất cả đều ở trong thùng. Mỗi người trong số họ chỉ có thể broadcast
video từ một tệp được ghi trước nhưng không phải từ bất kỳ luồng trực tiếp nào. Có thể ai đề nghị tôi làm gì không.Phát sóng Camera Android Video
Trả lời
Tôi đã đọc (Tôi nghĩ rằng nó thậm chí còn trên stackoverflow) mà bạn có thể cung cấp cho MediaRecorder một FileHandle của một kết nối TCP. Sau đó, bạn có thể nghe kết nối đó, đọc dữ liệu, đóng gói dữ liệu và gửi lại dưới dạng RTSP/RTP-Stream.
Nếu tôi tình cờ tìm thấy bài đăng gốc, tôi sẽ tham khảo ở đây.
EDIT:
Bản gốc bài viết là: Streaming Video From Android
Và phần về đặc tả tập tin là từ: http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system
Chỉ trong trường hợp, tôi trích dẫn ví dụ theo từ blog:
String hostname = "your.host.name";
int port = 1234;
Socket socket = new Socket(InetAddress.getByName(hostname), port);
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
MediaRecorder recorder = new MediaRecorder(); // Additional MediaRecorder setup (output format ... etc.) omitted
recorder.setOutputFile(pfd.getFileDescriptor());
recorder.prepare();
recorder.start();
Tuy nhiên, điều này chỉ gửi Video Fi Dữ liệu trên dây. Bạn có thể lưu nó và sau đó phát lại. Nhưng như đã đề cập, nó chưa phải là một luồng.
CẬP NHẬT: Bạn thậm chí không phải sử dụng TCP Socket cho bước đầu tiên. Tôi vừa vấp qua "LocalSocket" (1), điều đó cũng giúp bạn có một FileHandle để nạp MediaRecorder. Các ổ cắm cục bộ đó là "ổ cắm luồng miền AF_LOCAL/UNIX". Xem http://developer.android.com/reference/android/net/LocalSocket.html
Tôi chưa thử tất cả những điều trên kể từ hôm nay, nhưng sẽ sớm thôi. Vì vậy, có thể tôi có thể trợ giúp thêm trong tương lai gần :)
(1) LocalSocket không thể sử dụng được trên các phiên bản Android mới hơn vì lý do bảo mật! Xem Cập nhật từ 2015-11-25.
CẬP NHẬT 2: Chỉ thấy trong Nguồn Android "OUTPUT_FORMAT_RTP_AVP". Nhưng nó được ẩn :(Vì vậy, tôi đoán nó sẽ có sẵn trong các phiên bản API tương lai của Android https://github.com/android/platform_frameworks_base/blob/master/media/java/android/media/MediaRecorder.java Dòng 219:.
public static final int OUTPUT_FORMAT_RTP_AVP = 7;
tôi đã không cố gắng chỉ là lừa ẩn bằng cách cung cấp một mã hóa cứng 7
... Nếu ai không, xin vui lòng để lại nhận xét đây
CẬP NHẬT 2015-11-25
tôi chỉ chạy vào libstreaming: https://github.com/fyhertz/libstreaming tôi đã làm không nhìn vào nó quá sâu sắc, nhưng có vẻ như có rất nhiều điều cần học về phát trực tiếp từ Android từ dự án này (nếu không chỉ sử dụng nó).Tôi đọc ở đó rằng giải pháp LocalSocket không hợp lệ cho các phiên bản Android mới hơn: (Nhưng chúng trình bày một giải pháp thay thế: ParcelFileDescriptor
Tôi đã có thể đẩy luồng thô đến máy chủ theo cách này, nhưng không bao giờ có thể hiểu được Bạn có thể cung cấp cho nó xử lý của ổ cắm khách hàng và đẩy tất cả mọi thứ đến máy chủ –
Tôi đoán nó sẽ được trong một số tập tin đóng gói.Vì vậy, bạn sẽ phải depacketize nó đầu tiên để có được dữ liệu thô và sau đó repacketize nó vào gói RTP. H264 khác với MPEG_4_SP trong Fileformat – Fildor
Nó sẽ rất interresting cho tôi để có một tập tin âm thanh lưu trữ trên Android của tôi và gửi nó qua RTP đến PC của tôi (cùng một wlan), nơi tôi có thể nghe nó. Hãy làm điều này? – B770