2013-04-23 24 views
9

Xin chào các chuyên gia video Android :)Làm cách nào để tôi có thể quay video có độ phân giải thấp trên Android một cách đáng tin cậy trên nhiều thiết bị?

Tôi đang phát triển một ứng dụng Android cho phép người dùng quay video và tải video lên máy chủ từ xa (có liên quan nhiều hơn nhưng phần còn lại của ứng dụng không quan trọng). Do yêu cầu tải lên, điều quan trọng là video có kích thước hợp lý, vì vậy không phải độ phân giải siêu cao. Giả sử tối đa 680x480 hoặc 10Mb/phút. Đây không phải là vấn đề trên các thiết bị của Apple.

Tôi đã có những gì chỉ có thể được mô tả như một cơn ác mộng hoàn toàn cố gắng quay video với tốc độ bit thấp hợp lý đáng tin cậy trên một loạt các thiết bị Android.

Theo tôi được biết có hai cách để thu video trên Android:

1) Sử dụng Recorder Truyền thông/Camera API

2) Sử dụng Intent để mở ứng dụng camera quay video

Tùy chọn 1) mang lại sự linh hoạt nhất và cho phép chúng tôi dễ dàng thay đổi độ phân giải chụp. Tuy nhiên, Android Camera API KHÔNG đáng tin cậy trên nhiều thiết bị và tôi có thông tin rất tốt (bao gồm cả ai đó đã liên hệ với Google về vấn đề này) nếu bạn quay video bằng API này thì nó sẽ giảm 50% các thiết bị ngoài kia. Có một lý do mà Zoom Camera FX sử dụng Intent để quay video. Zoom Camera (ứng dụng khác nhau) dường như sử dụng Media Recorder, nhưng có rất nhiều đánh giá xấu cho video bị lỗi hoặc không hoạt động.

Tùy chọn 2) hoạt động tốt trên nhiều loại thiết bị vì nó sử dụng ứng dụng được xây dựng trên thiết bị. Vấn đề là bạn không kiểm soát được gì về độ phân giải, có một gợi ý về chất lượng trên Intent nhưng ứng dụng máy ảnh thông thường sẽ bỏ qua điều này. Samsung Galaxy S3 của tôi ghi video theo mặc định vào khoảng 2Mb/s. Đây là độ phân giải quá cao. Các ứng dụng được xây dựng trong khóa học có thể thay đổi độ phân giải, nhưng điều này phụ thuộc vào hành động của người dùng khó kiểm soát.

Tôi hiểu rằng tôi có thể sử dụng thư viện như ffmpeg để thay đổi độ phân giải của video sau khi chụp. Tuy nhiên điều này đòi hỏi tôi phải biên dịch thư viện cho Android và tôi cũng được thông báo rằng để sử dụng hợp pháp các codec giải mã/mã hóa trên thiết bị, bạn phải trả phí giấy phép khoảng 1 đô la cho mỗi bản sao của ứng dụng. Vì ứng dụng này sẽ được sử dụng miễn phí, đây không phải là một tùy chọn.

Vì vậy, đó là nơi tôi đang ở. Tôi đã tìm kiếm câu trả lời dài và cao, nhưng tôi không thể tìm ra cách quay video có độ phân giải thấp một cách đáng tin cậy bằng cách sử dụng Android.

Bất kỳ trợ giúp nào được đánh giá cao!

Matthew

+0

Bạn đã tìm thấy bất kỳ cách nào xung quanh vấn đề? Tôi đang thử tùy chọn 2 và bị kẹt tìm kiếm câu trả lời .... – Salmaan

Trả lời

0

Tôi nghĩ rằng bạn có thể sử dụng getSupportedPictureSizes để có được những minimun hỗ trợ kích thước trong mỗi máy ảnh điện thoại di động và sau khi bạn có thể sử dụng mediaRecorder với các tham số trong SetVideoSize(width, height)

+0

Cảm ơn Alvaro nhưng điều đó không làm cho Media Recorder API kém hơn – MisterMat

1

Nếu bạn nhắm mục tiêu API 18 trở lên, bạn có thể sử dụng CameraMediaCodec cùng nhau để ghi lại ở kích thước tùy ý và tốc độ bit. Xem, ví dụ: hoạt động "Hiển thị camera quay" trong Grafika.

Bạn có thể kiểm tra platform version dashboard để ước tính kích thước của thị trường mục tiêu ở cấp API nhất định.

2

Bạn có thể xác định chính xác trong lớp MediaRecorder bằng cách đặt kích thước Khung (width x height), sử dụng phương thức setVideoSize(int width, int height), kích thước khung nhỏ hơn video càng nhỏ, điều này áp dụng cho tất cả điện thoại Android, bạn sẽ không cần thay đổi kích thước khung hình trên mỗi thiết bị hoặc bạn có thể mã hóa tốc độ bit, điều này sẽ kiểm soát chất lượng nén của mỗi khung hình. Sử dụng phương pháp setVideoEncodingBitRate (int bitRate) tỷ lệ bit thấp hơn dẫn đến nén cao hơn, do đó dẫn đến chất lượng thấp hơn và kích thước tệp video thấp hơn. Hãy xem qua lớp MediaRecorder.

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