2011-12-23 39 views
10

Tôi đang sử dụng Android 2.2 với Eclipse.Xử lý video trong Android

Tôi muốn tạo một ứng dụng để quay video và cho mỗi khung hình, nó gửi nó dưới dạng bitmap đến một phương thức xử lý nó và trả về bitmap mới và hiển thị bitmap đã xử lý.

Tôi không quen thuộc với Android, vì vậy, xin vui lòng, bất cứ ai có thể gửi cho tôi các tài nguyên tôi cần phải xem xét để làm một điều như vậy?

Trả lời

20

Nó đơn giản là đủ để thực hiện các bước sau đây bằng cách sử dụng SDK Android:

  • Chụp các khung xem trước từ máy ảnh dưới dạng dữ liệu được bitmap. Camera.PreviewCallback sẽ trả về một dữ liệu byte[] đại diện cho khung ở một số định dạng hình ảnh có thể có.
  • Sửa đổi dữ liệu pixel. Vì dữ liệu trở lại dưới dạng byte thô, việc điều chỉnh dữ liệu tương đối dễ dàng ... khó khăn ở đây là áp dụng thuật toán cho việc xử lý hình ảnh cụ thể mà bạn muốn thực hiện. Không có bất kỳ hiệu ứng tích hợp (pre-4.0) có thể được áp dụng chỉ đơn giản là để hình ảnh, do đó bạn sẽ phải viết của riêng bạn.
  • Cũng có thể giải mã dữ liệu thành đối tượng Bitmap để làm việc với các pixel dễ dàng hơn. Trong 2.2, bạn có tùy chọn sử dụng NDK và jnigraphics để làm việc với các pixel của Bitmap trong mã gốc, nhanh hơn đáng kể so với lớp Java.
  • Lấy nội dung của kết quả Bitmap và hiển thị nó. Đối với dữ liệu di chuyển nhanh, bạn sẽ muốn hiển thị dữ liệu này trên SurfaceView; sử dụng các phương thức lockCanvas()unlockCanvasAndPost() có sẵn từ SurfaceHolder chế độ xem đó chứa.

Nếu đây là tất cả những gì bạn muốn làm, bạn có thể thực hiện điều này với một chút khó khăn. Tuy nhiên, điều này không giống như quay video. Android hiện không cung cấp móc để bạn có thể phát trực tuyến các khung hình ra thành vùng chứa video được mã hóa (MPEG4, 3GP, v.v.) trong thời gian thực. Đó là khả năng quay video được bao bọc chặt chẽ vào các MediaRecorder mà kiểm soát quá trình từ khung chụp tất cả các cách để viết video được mã hóa. Bạn sẽ cần một thư viện phần thứ ba như FFMPEG (đã được xây dựng và chạy bằng lớp NDK một số lần trong các ứng dụng Android) để hỗ trợ trong quá trình mã hóa các khung đã sửa đổi của bạn.

Tôi biết bạn có 2,2 mục tiêu, nhưng Android 4.0 cung cấp một số cứu trợ ở đây vì chúng đã phát hành phiên bản NDK mới, cho phép người ta nói nhiều hơn về những gì xảy ra khi đọc dữ liệu hình ảnh từ luồng trước khi truyền vào lớp trình bày. Tuy nhiên, tôi đã không dành đủ thời gian với nó để biết liệu nó có thể được đề nghị cho tình huống của bạn hay không.

+0

Tôi thực sự không muốn xem video, sử dụng bản xem trước thật tuyệt vời đối với tôi. Cảm ơn! –

+0

hi, Làm cách nào để tạo video bằng chuỗi ảnh bitmap ??? làm thế nào tôi có thể làm cho nó? –

5

Bạn có thể sử dụng Camera.setPreviewCallback với Camera.PreviewCallback#onPreviewFrame để nghe các khung xem trước đến từ máy ảnh.

Mã cho mã vạch 2d máy quét có thể là một điểm khởi đầu hữu ích: ZXing

7

Nếu bạn muốn xử lý video phức tạp hơn trong thời gian thực, tôi rất muốn giới thiệu OpenCV for Android.

OpenCV là thư viện máy tính cho phép bạn xử lý video trong thời gian thực và thư viện thực hiện các tác vụ đơn giản như phát hiện các cạnh hoặc các tác vụ phức tạp hơn như phát hiện khuôn mặt và đối tượng địa lý.

Bạn có thể sử dụng OpenCV trong điện thoại di động Android của mình trong một ngày, đặc biệt là vì nó bao gồm tài liệu và ví dụ mở rộng.

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