Sử dụng JavaScript truy cập camera sau, trước và chụp màn mình thiết bị di động

Nội dung bài viết

Trong bài viết này, tôi sẽ chỉ cho bạn cách truy cập camera của thiết bị trên một trang web thông qua JavaScript và hỗ trợ nhiều trình duyệt mà không cần đến các thư viện bên ngoài. 

Với JavaScript thì không gì là không thể, trước đây chúng tôi đã giới thiệu về cách "phát hiện rung lắc trên mobile sử dụng JavaScript" và bây giờ tips JavaScript sẽ giới thiệu cho bạn một cách truy cập camera trước và sau của thiết bị di dộng. 

Bài viết rất đơn giản nhưng mang đến một phát hiện mới về ngôn ngữ lập trình JavaScript. Để đạt được điều này thì bạn sẽ tập trung vào những vấn đề chính sau, kèm theo đó xem DEMO và code dưới bài viết là có thể thực hiện được.


Cách sử dụng API camera


Để truy cập máy ảnh (hoặc micrô) của người dùng, chúng tôi sử dụng API MediaStream của JavaScript. API cho phép truy cập trực tuyến vào video và âm thanh được ghi lại bởi các thiết bị này. Bước đầu tiên là kiểm tra xem trình duyệt có hỗ trợ API này hay không:

if (
    !"mediaDevices" in navigator ||
    !"getUserMedia" in navigator.mediaDevices
  ) {
    document.write('Not support API camera')
    return;
  }

Truy cập camera sử dụng mediaDevices


const videoStream = await navigator.mediaDevices.getUserMedia({ video: true }); Đoạn code trên sẽ hỏi người dùng có cho phép truy cập vào camera không. Nếu người dùng từ chối, nó sẽ đưa ra một try/catch. Vì vậy, bạn phải sử dụng try/catch trong tình huống này 

chụp màn hình javascript

Xin lưu ý rằng nó trả về một Promise, vì vậy bạn phải sử dụng async/await thoặc then() để get data đấy.

try {
    videoStream = await navigator.mediaDevices.getUserMedia(constraints);
    video.srcObject = videoStream;
} catch (error) {
    console.log(error)
}

Truy cập camera trước và sau của mobile

Theo mặc định, getUserMedia thiết bị quay video mặc định của hệ thống sẽ được sử dụng. Nếu là điện thoại di động có hai camera thì nó sử dụng camera trước. Để truy cập camera phía sau, chúng tôi phải đưa vào thông số kỹ thuật của video faceModeMode:"environment"

const constraints = {
  video: {
    width: { ... },
    height: { ... },
    facingMode: "environment"
  },
}

Giá trị mặc định faceingMode:"user" là camera trước.

Chụp ảnh bằng javascript

Sử dụng canvas để Chụp ảnh màn hình javascript

const canvas = document.querySelector("#canvas");
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
canvas.getContext("2d").drawImage(video, 0, 0);

Code full và demo


Các bạn có thể xem CODE và DEMO tại đây. Ở đó bạn sẽ mở  view page source lên để check source nhé.

Có thể bạn đã bị missing