Merhaba arkadaşlar. c/c++ ile webcam e erişmek istiyorum v4l2 apisini biraz araştırdım ama elle tutulur bi öğretici bulamadım. bana bu konuda yardım edermisiniz. webcam görüntüsünü yuv formatında elde etmem gerekiyor
Yuv formatını bilmiyorum fakat opencv ile webcam’i kullanabilirsiniz.
http://talhakoc.net/opencv-c-egitimi/
https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html
OpenCV ile çalışıyorsanız burada webcam’den veri okumayı anlatmıştım:
değerli arkadaşlar opencv sadece görüntü işlemek için kullanılıyor. ben webcam live stream için sesli ve görüntülü çalışmak istiyorum. bununla ilgili 2 sayfa da güzel örnek buldum onları paylaşıyorum. Allah nasip eder de projelerim biterse bu sayfada webcam stream ve codecler hakkında yazı yazmayı düşünüyorum. türkiyede çok araştırdım ama bu işe el atan olmamış. el atan da türkiyede durmamış.
v4l2 apisiyle ilgili eğitici sayfalar:
bu arada işinizi kolaylaştıracak birkaç şeyi eklemek isterim. linux için video cihazlarına erişmek için v4l2 ses cihazlarına erişmek için alsa apisi kullanılır. microsoft windowsta eskiden beri direct show kullanılıyordu fakat microsoft artık bunu yavaş yavaş terkedip media foundation apisine geçiş yapıyor.
Değerli arkadaşlar bu linki faydalı bulduğum için paylaşıyorum. dikkatli inceler okursanız video ve codec hakkında özet bilgi içeriyor.
one to many yada many to many webcam stream için atılması gereken adımları kısaca şurada ifade etmek istiyorum.
1- webcam ve mikrofona erişip görüntü ve sesi buffer nesnesi olarak alın. yuv yada raw olabilir codeğinize bağlı.
2- codecle ses ve görüntüyü sıkıştırın bu işleme encoding deniyor. (h.264 bu iş için şuan için en iyisi.) h265 bir diğer adı HEVC ise yüksek işlemci maliyeti olduğundan şuan için tercih edilmiyor. bunların yanında google’ın geliştirdiği vp8 vp9 codecleri de tercih edilebilir. tamamen sizin isteğinize bağlı
3- socket sunucusu kurmalısınız. eskiden beri tcp/udp kullanılır fakat artık websocket dahi kullanılıyor. yanlış bilmiyorsam zoom websocket kullanıyor. tcp ve udp ile veriyi byte olarak websocket ile text olarak yollarsınız. hepsinin birbirinden farklı özellikleri artıları ve eksileri var. kendinize en uygun olanını bulup socket sunucusu kuracaksınız.
4-socket üzerinden gelen video datasını decode(encode edilen datayı açma) edip player’a aktarıp izleteceksiniz.
not: encode ve decode işlemlerine genel itibariyle transcoding denir.
değerli arkadaşlar teoride çok basit gibi dursada kolay işler değildir. şu sıralar media serverlar baya iş yapıyor. elinden gelen çalışıp kendi media serverini yazabilir. iyi çalışmalar
Bu konu son cevaptan 30 gün sonra otomatik olarak kapatıldı. Yeni cevap girilmesine izin verilmiyor.