2011-12-02 20 views
5

Tôi thành công khi quay video qua Mediarecorder trên thẻ SD nhưng tôi muốn gửi video này tới máy chủ mà không cần ghi vào thẻ SD. Tôi tìm kiếm và tôi đã tìm thấy bưu kiệnFileDescriptor là cách gửi video tới cổng TCP nhưng tôi không biết cách nhận nó ở phía máy chủ, vui lòng giải thích. ở đây là khách hàng của tôi bên đangPhát trực tuyến video trong android by parcelFileDescriptor

socket = new Socket("hostname", portnumber); 
ParcelFileDescriptor pfd =ParcelFileDescriptor.fromSocket(socket); 
      recorder = new MediaRecorder(); 
      recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
      recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
      recorder.setOutputFile(pfd.getFileDescriptor()); 
      recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 
      mPreview = new Preview(VideoRecorder.this,recorder); 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
      setContentView(mPreview); 

Tôi muốn nhận nó về phía máy chủ và chơi nó để tạo ra dày đặc thời gian đoạn video transer.

biết rằng "Bản ghi MediaRecorder có thể ở định dạng 3GPP hoặc MP4. Định dạng tệp này bao gồm các nguyên tử, trong đó mỗi nguyên tử bắt đầu với kích thước của nó. Có nhiều loại nguyên tử khác nhau trong một tệp, nguyên tử mdat lưu trữ nguyên liệu thực tế Các khung hình của video và âm thanh được mã hóa Trong phiên bản Cupcake, Android bắt đầu viết ra một nguyên tử mdat với các khung được mã hóa, nhưng nó phải để lại kích thước của nguyên tử rỗng vì các lý do rõ ràng. điền vào chỗ trống sau khi ghi âm, nhưng tất nhiên các mô tả tập tin ổ cắm không thể tìm kiếm được. Vì vậy, luồng đã nhận sẽ phải được sửa sau khi quá trình ghi kết thúc hoặc khung hình video/âm thanh thô phải được máy chủ xử lý ".

Tôi muốn một mã máy chủ (có thể là điện thoại Android hoặc PC). nếu có cách khác xin vui lòng giúp tôi ......

Cảm ơn

Trả lời

2

Để dòng từ Android hoặc máy tính bạn cần phải thực hiện giao thức trên dòng nước chảy được thực hiện hơn và máy chủ. Có một số người trong số họ như HSL, RTPS vv (hơn http://en.wikipedia.org/wiki/Streaming_media). Nó không phải là một vấn đề tầm thường, và chỉ có rất ít dịch vụ phát trực tuyến thành công từ Android.

Bạn có thể kiểm tra như thế nào để thực hiện và dịch vụ hấp trên android đây: https://github.com/fyhertz/libstreaming

Thư viện được chia cho Android 5, nhưng làm việc cho 4.4.x

+1

Một tác giả của thư viện này đã viết rằng ông đã tìm thấy một lừa để làm cho nó hoạt động trong Android 5. – CoolMind

+0

bạn có thể cho bạn một liên kết đến đó không? Tôi nhìn GitHub và chỉ có một bình luận về nỗ lực hỗ trợ Lolipop. Không rõ ràng nếu nó hoạt động đúng hay không. – Califlower

+0

một liên kết từ GitHub đó (http://stackoverflow.com/questions/26990816/mediarecorder-issue-on-android-lollipop). Nó nói: "như Android Lollipop bằng cách sử dụng một LocalSocket là không thể nữa vì lý do bảo mật. Nhưng bằng cách sử dụng một ParcelFileDescriptor hiện các trick. Thêm chi tiết trong tập tin MediaStream.java". – CoolMind