- Android 14 giúp giảm nhu cầu dùng ứng dụng riêng để làm webcam cho PC, bằng cách có thể cung cấp chế độ webcam USB ở cấp hệ điều hành
- Tùy chọn USB Preferences mới có thể chuyển thiết bị sang chế độ UVC (USB Video Class), để PC chạy Windows, macOS, Linux nhận diện như một webcam USB tiêu chuẩn
- Tuy nhiên tính năng này không tự động được bật; cần đúng cấu hình kernel, thiết lập UVC, cập nhật USB HAL, và ứng dụng hệ thống Webcam Service
- Webcam Service chuyển các khung hình từ Camera2 API tới node
/dev/video, và người dùng có thể điều khiển xem trước, zoom, đổi ống kính từ thông báo - Ngay cả thiết bị đã lên Android 14 cũng có thể bị loại nếu kernel cũ hoặc bị giới hạn bởi HAL, nên việc hỗ trợ thực tế phụ thuộc vào cách nhà sản xuất triển khai
Chế độ webcam USB của Android 14
- Từ Android 14, tính năng dùng điện thoại thông minh làm webcam cho PC có thể được tích hợp ngay trong Android OS
- Trong thời kỳ COVID, việc sử dụng các nền tảng họp video như Zoom, Google Meet đã tăng lên, nhưng webcam tốt thì khó mua hoặc đắt, còn chất lượng webcam tích hợp trên laptop cũng có hạn
- Camera trên điện thoại thông minh thường cho chất lượng hình ảnh tốt hơn phần lớn webcam, nên trước đây nhiều người dùng đã dùng phần mềm bên thứ ba để biến điện thoại thành webcam
- Trên Android 14, tùy chọn USB webcam có thể xuất hiện trong USB Preferences
- Các chế độ USB hiện có gồm truyền tệp/Android Auto (MTP), USB tethering (NCM), MIDI, PTP, v.v.
- Khi chọn USB webcam, nếu thiết bị hỗ trợ thì chế độ USB sẽ chuyển sang UVC
- PC chạy Windows, macOS, Linux được kết nối sẽ nhận diện thiết bị Android như một webcam USB tiêu chuẩn
- Các thiết bị Android khác cũng có thể làm được điều này
Các điều kiện cần để kích hoạt tính năng
- Hỗ trợ webcam trong Android 14 không phải là tính năng được bật sẵn theo mặc định
- Để hoạt động thực tế cần bốn điều kiện
- Bật cấu hình Linux kernel
- Cấu hình UVC gadget
- Cập nhật USB HAL
- Cài sẵn ứng dụng hệ thống mới
Yêu cầu về cấu hình kernel
- Cấu hình Linux kernel cần thiết là
CONFIG_USB_CONFIGFS_F_UVC - Cấu hình này cần thiết để thiết bị Android có thể được mount như một UVC gadget
- Nhiều thiết bị được nâng cấp lên Android 14 và gần như mọi thiết bị ra mắt cùng Android 14 đều có khả năng dùng kernel đã bật cấu hình này
- Generic Kernel Image (GKI) đã bật cấu hình này theo mặc định từ
android12-5.10 - Các thiết bị ra mắt với Android 12 trở lên và dùng Linux kernel 5.10 trở lên phải đi kèm kernel GKI
- Generic Kernel Image (GKI) đã bật cấu hình này theo mặc định từ
- Trong hệ sinh thái Android, việc nâng cấp major kernel version là hiếm, và do chương trình Google Requirements Freeze (GRF) vẫn cho phép chứng nhận các triển khai vendor cũ, nên một số thiết bị nâng cấp lên Android 14 có thể không hỗ trợ tính năng webcam USB
- Cách trực tiếp nhất để kiểm tra khả năng hỗ trợ là xác nhận phiên bản kernel và việc cấu hình đã được bật hay chưa
- Kiểm tra phiên bản kernel:
adb shell "cat /proc/version"
- Kiểm tra cấu hình kernel:
adb shell "zcat /proc/config.gz | grep 'CONFIG_USB_CONFIGFS_F_UVC'"
- Kiểm tra phiên bản kernel:
- Ví dụ, Galaxy Z Fold 5 chạy Android 13 dùng
android13-5.15GKI và cóCONFIG_USB_CONFIGFS_F_UVC=y, nên khi nâng cấp lên Android 14, nếu đáp ứng các điều kiện còn lại thì có thể hỗ trợ tính năng webcam USB
Ứng dụng hệ thống Webcam Service
- Trong một số bản beta Android 14 QPR1 cho thiết bị Pixel có kèm ứng dụng hệ thống mới tên là Webcam Service
- Tên gói là
com.android.deviceaswebcam - Phụ thuộc vào thư viện dùng chung
libjni_deviceAsWebcam.so - Ứng dụng và thư viện này dự kiến sẽ được đưa vào bản phát hành mã nguồn sắp tới của Android 14
- Tên gói là
- Ứng dụng Webcam Service triển khai dịch vụ DeviceAsWebcam để biến thiết bị Android thành webcam
- Dịch vụ này chuyển các khung hình camera tới node
/dev/videomà thiết bị host có thể đọc được - Theo SELinux policy, node
/dev/videochỉ có các tiến trình trong domaindevice_as_webcammới được truy cập- Thực thể thực sự truy cập chỉ là ứng dụng hệ thống Webcam Service
- Vì vậy, hỗ trợ webcam USB native của Android 14 có thể được nhà sản xuất thiết bị tận dụng, nhưng ứng dụng bên thứ ba không thể trực tiếp sử dụng
Cách khởi động webcam USB và quyền điều khiển của người dùng
- Khi tùy chọn USB webcam mới được bật trong USB Preferences, hệ thống sẽ broadcast intent
android.hardware.usb.action.USB_STATE- Intent này có chứa extras
connectedvàuvc
- Intent này có chứa extras
- Webcam Service có một receiver nhận intent này
- Extra
uvcđược đặt làtrue - Phương thức framework
android.hardware.usb#isUvcSupportEnabled()trả vềtrue - Khi cả hai điều kiện đều đúng thì dịch vụ hệ thống sẽ được khởi động
- Extra
isUvcSupportEnabled()sẽ trả vềtruekhi system propertyro.usb.uvc.enabledlàtrue- OEM phải đặt thuộc tính này tại thời điểm build
- Nếu không được đặt thì tùy chọn USB webcam sẽ không hiển thị trong USB Preferences và Webcam Service cũng không khởi động
- Thuộc tính này chỉ có thể được đọc bởi các ứng dụng hệ thống như Settings và Webcam Service
- Khi Webcam Service khởi động, một thông báo mới sẽ xuất hiện để người dùng cấu hình webcam
- Nhấn vào thông báo sẽ mở phần xem trước camera
- Người dùng có thể zoom in/out hoặc đổi ống kính
- Về bên trong, ứng dụng Webcam Service khởi chạy một foreground service để tránh bị hệ thống kết thúc
- Ứng dụng dùng Camera2 API và hỗ trợ stream ở 720p (1280×720) hoặc 1080p (1920×1080)
- Trên thiết bị host được kết nối, tên thiết bị webcam hiển thị là Android Webcam
ConfigFS và USB HAL
- Tên hiển thị trên host, các tham số video và cách mã hóa chính xác sẽ phụ thuộc vào cách nhà sản xuất thiết bị cấu hình configfs cho UVC gadget
- Trên các thiết bị Pixel dùng Tensor, cấu hình UVC gadget function của Google nằm trong các tệp
init.gs[101|201].usb.rctrong/vendor/etc/init/hw - Để Android chuyển chế độ USB được chọn trong Settings sang UVC, cần có USB HAL đã được cập nhật
- Do chương trình GRF, nhiều thiết bị được nâng cấp lên Android 14 có thể sẽ không nhận được USB HAL đã cập nhật, và trong trường hợp đó tính năng sẽ không hoạt động
Hỗ trợ nền tảng và giới hạn
- Việc Google triển khai tính năng webcam USB native trong Android cho phép các nhà sản xuất thiết bị nào muốn có thể áp dụng tính năng này
- Nếu ứng dụng Webcam Service được đưa vào AOSP như dự kiến, nhà sản xuất thiết bị có thể tận dụng nó để triển khai tính năng webcam
- Tính năng này có thể được so sánh với Continuity Camera của Apple, nhưng cách làm của Android hoạt động trên nhiều nền tảng hơn
- Điện thoại chạy Android 14 và đáp ứng các yêu cầu sẽ có thể chuyển thành webcam USB tiêu chuẩn để dùng với mọi PC
1 bình luận
Ý kiến trên Hacker News
scrcpy đã rất tuyệt cho mục đích này: https://github.com/Genymobile/scrcpy
Để stream camera điện thoại trong OBS, chỉ cần đợi thiết bị bằng
adb, lấy IP củawlan0, kết nối bằngadb tcpip 5555vàadb connect, rồi chạyscrcpy -e --v4l2-sink=/dev/video0 --lock-video-orientation=1 -n -NNếu có thể build từ source, tôi cũng đã thêm vài commit trên PR đó, hỗ trợ chế độ capture tốc độ cao bị giới hạn của Android, cho phép stream camera 120fps/240fps. Không mấy hữu ích cho họp hành, nhưng hữu dụng để capture video VR thực tế hỗn hợp với frame rate cao. Theo tôi biết, không có ứng dụng webcam Android nào, dù độc quyền hay mã nguồn mở, vượt quá 60fps
adbkhá đầy đủ rồi, nên tôi muốn xin lời khuyên về hai thứ còn thiếu phía tôi. Một là cách đặt cổng cố định cho ADB/TCP hoặc tự động chuyển tiếp về PC, vì Android giờ đổi cổng mỗi lần. Cái còn lại là cách bật ADB/TCP trên hotspot di động, vì Android phàn nàn “Please connect to WiFi”Trừ hai điểm này, nhờ scrcpy, KDE Connect và Waydroid, tích hợp Linux-Android gần như hoàn hảo, đến mức người dùng Apple cũng phải ghen tị
Hơi lạc đề một chút, nhưng trong thời gian lockdown, khi tìm cách dùng iPhone làm webcam, tôi đã phát hiện ra VDO.Ninja: https://vdo.ninja/
Ban đầu nó là phương tiện gửi feed video vào OBS, rồi tôi dùng nó để dựng đầu vào webcam. Khi dự án lớn dần, nó cũng có thể dùng theo kiểu giống Zoom, hiển thị ngay chia sẻ video và audio desktop trong trình duyệt, nhờ vậy tôi đã tổ chức được các buổi xem phim ảo từ xa
Có thể làm bằng UI tạo phòng, nhưng cũng có thể cấu hình toàn bộ chỉ bằng tham số URL, nên linh hoạt và vững chắc hơn nhiều: https://docs.vdo.ninja/master/how-does-it-work
Khi tạo URL cho bên gửi và bên nhận, chúng sẽ tự động kết nối qua WebRTC. Ví dụ, có thể tạo một source capture cửa sổ VLC để gửi video và audio, rồi hai URL đích nhận video/audio đó đồng thời mỗi bên cũng gửi audio micro của mình cho nhau. Vì vậy có thể cùng xem và nghe phim trong trình duyệt, đồng thời trò chuyện. Tôi không có liên quan gì đến dự án này, chỉ đơn giản nghĩ rằng nó thật sự xuất sắc
OBS là công cụ dùng để stream màn hình máy tính lên những nơi như Twitch: https://obsproject.com/
Đây là một tính năng bổ sung đáng mừng. Các công ty đã bỏ thời gian và công sức để tạo ra camera có các tính năng như theo dõi hoặc chế độ chân dung
Tuy nhiên cảm giác là nó ra hơi muộn so với thời điểm trong đại dịch, khi mọi thứ đột ngột chuyển sang làm từ xa và mọi người nháo nhào tìm mua webcam. Giá mà khi đó họ cung cấp tính năng này thay vì khiến người dùng phải mua ứng dụng bên thứ ba
Với tôi thì quá ít và quá muộn. Tôi không muốn trở thành kiểu người đưa ra những “hot take” như thế này, nhưng nếu nghe qua một chút thì: đến năm 2013 tôi vẫn chỉ dùng điện thoại bàn có dây, không có điện thoại di động, rồi bắt đầu với Nexus 4, và cứ 2–3 năm lại đổi cho đến Pixel 6. Nhưng ngày mai chiếc iPhone đầu tiên của tôi sẽ được giao đến.
Có nhiều lý do. Không thể cắm điện thoại Google vào màn hình ngoài để mirror, và đầu ra DisplayPort bị vô hiệu hóa rõ ràng trong mã nguồn mà không có lý do: https://twitter.com/MishaalRahman/status/1189998588023234560 Đây là tính năng hoạt động tốt trên các điện thoại khác.
Cũng không thể truy cập tin nhắn văn bản trên điện thoại Android nếu không dùng ứng dụng riêng. Thử
adb backupcũng không được; có thể root thì làm được, nhưng theo tôi biết quá trình root thường sẽ xóa sạch mọi thứ.Cũng không thể truy cập bản sao lưu của điện thoại. Nó chỉ được lưu trên máy chủ Google, và cách duy nhất gần nhất là khôi phục vào điện thoại. Tôi đang cầm trên tay thiết bị vật lý do chính mình mua, nhưng lại không truy cập được mọi thứ bên trong nó. iPhone có thể cắm vào Windows hoặc Mac để dump bản sao lưu ra máy tính, trong đó có tin nhắn, thiết lập hệ thống, danh bạ, ảnh, cơ sở dữ liệu, gần như mọi thứ. Có lẽ ngoại lệ chỉ là kiểu khóa bảo vệ phần cứng.
Cũng khỏi cần nói về các trò của Google: mớ messenger chồng chéo, nhiều dịch vụ bị đóng, hỗ trợ thiếu, tích hợp quảng cáo và theo dõi ngày càng mạnh hơn. Apple cũng không hoàn hảo, nhưng tôi thấy cũng đáng thử bước vào khu vườn có tường bao một thời gian. Trên iOS có xuất hình ra màn hình, truy cập thiết bị của mình, nhắn tin có lý hơn, và ít nhất là cảm giác họ có quan tâm đến quyền riêng tư. Trớ trêu là tôi cảm thấy mình có nhiều quyền kiểm soát hơn khi dùng sản phẩm Apple so với sản phẩm Google.
Ví dụ không thể biết tốc độ sạc hay thời gian sạc dự kiến, nên khó xác nhận mình đã chọn đúng củ sạc nhanh và cáp tương thích với iPhone trong số nhiều bộ sạc; và dù đã cài Chrome hay Firefox, khi chọn văn bản rồi bấm tìm kiếm trên web thì nó vẫn mở Safari. Có rất nhiều sự khó chịu nhỏ như vậy, và hệ điều hành quá đóng nên chẳng làm được gì.
Android dễ tùy biến hơn rất nhiều, và những việc như sideload để chạy trình giả lập GBA trên iPhone cũng dễ hơn. Trong hệ sinh thái Android cũng có nhiều thiết bị thú vị hơn, như điện thoại gập Samsung. Tích hợp hệ sinh thái với Mac thì tốt, nhưng khó nói bên nào rõ ràng tốt hơn.
Trong số các dịch vụ Google đã khai tử, không có dịch vụ nào ảnh hưởng đến tôi, và tôi cũng không rõ “mớ messenger chồng chéo” là nói đến gì. Cũng không rõ là thiếu hỗ trợ nào.
Pixel 1 XL rất tuyệt, nhưng sau khoảng 2 năm camera liên tục lỗi, mất hơn 3 giây để mở hoặc thường xuyên chết. Cuối cùng thời lượng pin trở nên tệ, pin thay thế cũng xuống cấp chỉ sau vài tháng nên tôi chuyển sang máy khác.
Pixel 3a rơi khỏi túi và vỡ hai tháng trước khi hết cập nhật bảo mật. Nhìn chung đó là một điện thoại ổn, nhưng Google không hỗ trợ lâu như tôi kỳ vọng. Pixel 6 Pro đến giờ vẫn ổn, nhưng Pixel 5 của vợ tôi có các vấn đề như hiệu năng chậm và kết nối di động không ổn định.
Bài học có thể là “đừng mua điện thoại Pixel”, nhưng các lựa chọn thay thế có thể còn là ác mộng hơn về mặt bảo mật. Điện thoại Galaxy từng được cài sẵn một lượng ứng dụng rác khó tin cần phải gỡ. Pixel chỉ có ứng dụng Google và phần lớn có thể gỡ, nên mối lo về quyền riêng tư và bảo mật nhỏ hơn so với việc có sẵn ứng dụng của 30 công ty và có thể còn không xóa được.
Suốt nhiều năm tôi đã chỉ trích Apple rất nhiều, nên thật thất vọng khi cuối cùng việc đổi nền tảng lại có vẻ là lựa chọn tốt nhất.
Một vài bất tiện nghe khá khó chịu, nhưng chưa đến mức tôi chấp nhận ràng buộc phải trả phí thuê bao định kỳ để viết code trên chiếc máy tính mình muốn rồi chạy trên điện thoại của tôi hay của bạn bè, và phải nộp cho người kiểm duyệt có thể từ chối vì bất cứ lý do nào.
Trên các hệ thống như vậy có thể truy cập
adbbằng root, và khi đó cũng truy cập được cơ sở dữ liệu tin nhắn SQLite. Mirror màn hình qua chế độ thay thế DP của USB-C hoạt động mặc định, và cũng có thể bật “desktop mode” của Android, nhưng nó còn khá cơ bản và thử nghiệm.Fairphone được hỗ trợ lâu, dễ sửa, và cũng có thể chạy kernel mainline (postmarketOS, v.v.). Tất nhiên, xét về hệ điều hành thì bất kỳ điện thoại Android nào vẫn phụ thuộc vào Google.
Tôi đồng ý với nhiều phàn nàn về Google, nhưng chuyển sang Apple có cảm giác như đổi một cái xấu lấy một cái xấu khác. Tôi sẽ không bao giờ gọi điện thoại Apple là “của mình”, và cũng không cảm thấy Apple cung cấp “quyền truy cập thiết bị của mình”.
Tôi đã dùng ứng dụng Camo hơn 1 năm. Nó hoạt động rất tốt, và cũng hỗ trợ xem camera qua Wi‑Fi nên không cần cáp. Tài khoản cơ bản miễn phí: https://reincubate.com/camo/
Cái này đã có từ vài năm trước rồi. Không rõ “chưa có hỗ trợ” ở đây nghĩa là theo khía cạnh nào
Nếu tính năng này được đưa vào, Pixel 6a hiện có giá 250 USD rất có khả năng trở thành webcam đáng tiền nhất trên thị trường
Một trang săn ưu đãi cực kỳ phiền phức có viết rằng sau 6 tháng máy sẽ tự động được mở khóa nhà mạng. Tôi sẽ không đặt link vì trang đó quá phiền. Bạn nhất định phải kích hoạt điện thoại để bắt đầu bộ đếm 6 tháng
Theo tôi biết, trên Nokia N900 vào năm 2009 đã có thể làm việc này bằng gstreamer. Thực ra tôi không tạo thiết bị video để dùng, nhưng tôi nghĩ
v4l2sinkkhi đó đã có rồi. Tôi đã dùng nó khá nhiều lần để stream qua cửa sổ từ xa và OpenCVĐó là chiếc điện thoại tốt duy nhất tôi từng sở hữu. Giá mà trên thiết bị Android mọi thứ cũng dễ như vậy, nhưng kỳ lạ là hầu như lúc nào cũng không phải thế
Việc đó cũng khó và đáng được tôn trọng. Nhưng tôi có cảm giác quan điểm cứng rắn, bảo thủ như vậy về phần mềm đã thống trị hoàn toàn những thứ được tạo ra trong một thời gian dài. Ngày càng ít kiểu điện toán muốn trao cho power user một chỗ đứng vững chắc. Công nghệ cứ tiếp tục nới rộng khoảng cách và trở nên khó hiểu hơn. Trớ trêu là vì chúng ta liên tục đánh mất những lối vào để đi sâu hơn và trở thành chuyên gia hay người khám phá
Giá mà có thể dùng điện thoại Android làm camera hành trình. Khi nào mới làm được nhỉ? Trông như một tính năng hiển nhiên là phải có
Đây đúng là một tính năng có thì tốt, nhưng có lẽ đa số vẫn muốn cầm điện thoại trong lúc họp Zoom. Dù vậy cũng có thể nhiều người có điện thoại dư