logitech vlc ffmpeg c922 streaming UVC v4l2

Problem with Logitech C922 and C930 is that Logitech changed the way the camera lists it’s capabilities and now v4l2 orUVC drivers  only sees „RAW” YUV2 and MJPEG formats for this camera.

H264 is still there, but is muxed into MJPEG stream (meaning MJPEG is a container with both still frames and H264 encoded video)

This f#cks up most programs which cannot extract that h264 stream from MJPEG container. The only program I found which can access 60fps or 30fps is guvcview – I have no idea how it does it but it shows sharp and fast image (it still freezes when I chose h264 in camera settings)

The trick which allowed me to use 60fps in OBS is:

  1. use guvcview to set the proper capture format
  2. create a named pipe (a special kind of file which is just a stream of data)
  3. in guvcview click capture video stream to that file (named pipe)
  4. in OBS add a media source with that named pipe
  1. http://www.lewisroberts.com/2015/05/15/raspberry-pi-mjpeg-at-30fps/
  2. http://anders.tonfeldt.se/view_record_webcam_vlc.html
  3. https://github.com/csete/bonecam
  4. http://stackoverflow.com/questions/15787967/capturing-h-264-stream-from-camera-with-gstreamer
  5. http://stackoverflow.com/questions/38185041/vlc-how-to-play-a-mjpeg-stream
  6. http://stackoverflow.com/questions/14923666/vlc-and-mjpeg-decoder-streaming-invalid-header
  7. https://wiki.videolan.org/Documentation:Streaming_HowTo/Easy_Streaming/
  8. https://wiki.videolan.org/Documentation:Command_line/
  9. https://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples/
  10. https://wiki.videolan.org/Documentation:Streaming_HowTo_New/
  11. https://wiki.videolan.org/Documentation:Advanced_Use_of_VLC/
  12. https://wiki.videolan.org/Documentation:VLC_Modules_Loading/

 

 

 

  1. https://trac.ffmpeg.org/ticket/1387 <- READ
  2. guvcview or ffmpeg or somehow extract h264 stream from mjpeg  – guvc allows for 60fps capture!!!
  3. http://ffmpeg.gusari.org/viewtopic.php?f=11&t=2112
  4. https://www.mail-archive.com/search?l=ffmpeg-user@ffmpeg.org&q=subject:%22Re%5C%3A+%5C%5BFFmpeg%5C-user%5C%5D+Capture+H.264+stream+from+Logitech+C930e+%5C(C930%5C)%09webcam%22&o=newest&f=1
  5. https://www.eevblog.com/2015/05/19/how-to-live-stream-a-usb-webcam-on-a-raspberry-pi-2/
  6. https://obsproject.com/forum/threads/no-mjpeg-available-w-c930e.52644/
  7. http://alax.info/blog/1566
  8. http://raspberrypi.stackexchange.com/questions/4412/streaming-h264-with-logitech-c920
  9. http://stackoverflow.com/questions/25086843/how-to-access-the-h264-stream-from-webcams-that-feature-h264-hardware-encoders
  10. http://stackoverflow.com/questions/24675538/how-to-support-hardware-encoded-h264-though-uvc
  11. https://sourceforge.net/p/linux-uvc/mailman/message/31773248/
  12. http://gstreamer-devel.966125.n4.nabble.com/attachment/4665838/0/USB_Video_Payload_H%20264_1%200.pdf
  13. http://gstreamer-devel.966125.n4.nabble.com/Improve-default-resolution-for-a-Logitech-C920-webcam-td4665487.html#a4665838
  14. http://stackoverflow.com/questions/28424243/using-ffmpeg-on-windows-what-is-the-command-to-capture-hardware-encoded-h264-st
  15. https://ffmpeg.zeranoe.com/forum/viewtopic.php?t=2529
  16. https://www.jpsaman.org/vlc/rtmp
  17. cvlc v4l2:///dev/video0 --sout '#standard{access=http,mux=ffmpeg{mux=flv},dst=:8080}'
  18. https://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264
  19. http://stackoverflow.com/questions/39859378/vlc-syntax-to-transcode-and-stream-to-stdout
  20. http://stackoverflow.com/questions/30765700/ffserver-streaming-h-264-from-logitech-c920-without-re-encoding/30779835#30779835
  21. https://forum.videolan.org/viewtopic.php?t=57940
  22. https://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264
  23. http://www.tldp.org/REF/VLC-User-Guide/x1110.html
  24. https://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples/
  25. http://www.ffmpeg-archive.org/Capture-H-264-stream-from-Logitech-C930e-C930-webcam-td4670543.html
  26. https://github.com/mpromonet/v4l2rtspserver
  27. http://superuser.com/questions/494575/ffmpeg-open-webcam-using-yuyv-but-i-want-mjpeg
  28. http://ffmpeg.gusari.org/viewtopic.php?f=11&t=2112
  29. http://www.raspberry-projects.com/pi/pi-hardware/raspberry-pi-camera/streaming-video-using-vlc-player
  30. http://raspberrypi.stackexchange.com/questions/10564/streaming-live-from-the-picam
  31. https://www.raspberrypi.org/forums/viewtopic.php?t=43969
  32. http://raspberrypi.stackexchange.com/questions/27082/how-to-stream-raspivid-to-linux-and-osx-using-gstreamer-vlc-or-netcat
  33. http://raspberrypi.stackexchange.com/questions/7446/how-can-i-stream-h-264-video-from-the-raspberry-pi-camera-module-via-a-web-serve
  34. http://betterlogic.com/roger/2010/12/vlc-output-to-stdout/
  35. http://raspberrypi.stackexchange.com/questions/23182/how-to-stream-video-from-raspberry-pi-camera-and-watch-it-live
  36. https://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples/
  37. http://raspberrypi.stackexchange.com/questions/4412/streaming-h264-with-logitech-c920

Rozkminki

  1. Python hackathon starter
  2. What is a command whagt is an action: http://thomas.baudel.name/Informatique/Outils/commands.html
  3. webgazer – używanie kamery do śledzenia wzroku: https://news.ycombinator.com/item?id=11770273
  4. gun – firebase p2p http://gun.js.org/#step1
  5. śpiew gardłowy: http://www.fotuva.org/music/emory.html

Deployd

  1. https://bitbucket.org/simpletechs/dpd-passport
  2. https://www.npmjs.com/package/dpd-passport#requirements
  3. http://stackoverflow.com/questions/28122277/deployd-how-to-implement-dpd-passport-and-securely-authenticate
  4. http://stackoverflow.com/questions/30898327/how-to-handle-callback-redirects-from-dpd-passport-via-google-strategy
  5. https://developers.facebook.com/docs/facebook-login/web#logindialog
  6. https://developers.facebook.com/docs/facebook-login/web

Storytelling & live videos

  1. https://www.khanacademy.org/partner-content/pixar/storytelling/we-are-all-storytellers/v/video1-final
  2. https://www.facebook.com/facebookmedia/best-practices/live

voice recognition raspberry pi

  1. https://diyhacking.com/best-voice-recognition-software-for-raspberry-pi/
  2. http://stevenhickson.blogspot.com/2013/05/voice-command-v20-for-raspberry-pi.html
  3. https://oscarliang.com/raspberry-pi-voice-recognition-works-like-siri/
  4. https://github.com/gillesdemey/google-speech-v2/blob/master/README.md
  5. https://www.rhydolabz.com/wiki/?p=16234
  6. https://github.com/StevenHickson/PiAUISuite
  7. KALDI gstreamer https://github.com/alumae/kaldi-gstreamer-server
  8. https://github.com/kaldi-asr/kaldi
  9. https://github.com/hungtraan/FacebookBot#voice-recognition
  10. https://wit.ai/maciejjankowski/pi-kontrol/settings

 

 

Lekcja 3: Klocki Javascriptu

Składnia, zmienne, funkcje

  1. Naciśnij F12, żeby odpalić narzędzia developerskie i przejdź na zakładkę „Konsola”
  2. wpisz: console.log(„cześć Maciek”) i naciśnij enter
  3. Co się stało:
    1. console to obiekt, czyli taki pojemnik na rzeczy,
    2. log to funkcja dostępna w tym obiekcie
    3. cześć to argument przekazany do funkcji log
    4. nawiasy, kropki i ciapki to elementy składni języka
  4. Podobnie: Math.sqrt(16): jest sobie obiekt Math, który ma funkcję sqrt, której podajesz 16, a funkcja sqrt zwraca wynik, który zobaczysz w konsoli po naciśnięciu enter

Świat byłby prostszy gdyby każdy nazywał się Maciek, ale niestety…

  • Jak napisać „cześć Lucyna” albo „cześć Ewka” jeśli mamy do czynienia z Lucyną lub Ewką?

Ano. Gdzieś trzeba przechować imię – od tego są zmienne, czyli:
var imię;
imię = „Ewka”

I juz można będzie napisać:

console.log(„cześć” + imię)

  • A jak zapytać o imię i wstawić podaną wartość do zmiennej?

Jest funkcja prompt(„Podaj imię”, „np. Alojz”) – wpisz ją w konsolę, daj enter i zobacz co zwróci…

Tę zwrotkę z funkcji można przypisać do zmiennej imię:

imię = prompt(„Podaj imię”, „np. Alojz”)

wpisz to do konsoli, a potem podaj imię.

teraz jak napiszesz w konsoli imię i dasz enter zobaczysz wartość wpisaną do zmiennej imię

Teraz możesz napisać:

console.log(„cześć” + imię)

  • na koniec najważniejsza rzecz: czy nie fajniej byłoby po prostu napisać: cześć(imię) ?
  • Zakładamy, że fajniej, więc piszemy:

function cześć (kto){
console.log(„cześć” + kto)
}

Teraz jak napiszesz: cześć(„Luiza”) uruchomisz funkcję cześć, która wypisze tekst w konsoli

[Kurs programowania internetów] Lekcja 2: Dokumentacje, książki, inne zasoby

Celem tego kursu jest wyłącznie ogarnięcie najpodstawowszych podstaw, dlatego poniżej masz listę linków do zgłębiania tematu:

  1. http://eloquentjavascript.net/contents.html – dobra książka o programowaniu w JavaScript
  2. https://tympanus.net/ – fajne przykłady, głównie CSS
  3. http://codepen.io/ – fajne przykłady
  4. Dokumentacje – Ważne: Dokumentacja Twoim przyjacielem jest
    1. HTML
    2. CSS
    3. JavaScript
    4. Web APIs & DOM

Zadanie: przejrzeć linki, poklikać, oswoić się

Następna lekcja

Powrót: Kurs programowania internetów

[Kurs programowania internetów] Lekcja 1: HTML, Javascript, CSS po łebkach

  1. Idź na stronę google
  2. Kliknij prawym na dowolny element strony
  3. Wybierz Zbadaj
  4. Wu-ala – możesz psuć stronę na której jesteś 🙂
  5. Ten dziwny tekst to HTML – język opisujący strukturę strony, którą oglądasz
    1. Przykładowo: <b>pogrubiony tekst</b> oznacza, że zobaczysz pogrubiony tekst
    2. Każda strona internetowa zawiera HTML. Pobaw się, popatrz, poklikaj.
    1. A to są style, czyli CSS.
    2. Zobacz, że wpisując color: red w element.style zmienisz kolor tekstu przycisku.
  6. Na górze narzędzi deweloperskich przełącz się na Console
    1. wpisz tam alert(„Jest Super!”) i naciśnij enter.
    2. Tym oto sposobem możesz wykonywać polecenia w języku Javascript
  7. HTML + CSS + Javascript to wszystko czego potrzebujesz do robienia stron i aplikacji internetowych
  8. Od tej pory będziemy montować nasze strony w JSBin – to taki serwis, gdzie wprowadzasz HTML, CSS i Javascript i masz podgląd na żywo.
    1. Sprawdź i oswój się.
    2. Większość kodu w sekcji HTML <head> powinna tam być.
    3. Treść strony znajduje się w tagu <body>
    4. Zobacz, że nowa linia w kodzie html, nie oznacza, że na stronie dostaniesz nową linię. Aby wymusić nową linię używasz tagu <br>
    5. Style CSS grupujemy w klasy (class), które możemy przypisać do różnych elementów w HTMLu

Część kursu programowanie dla znajomych

Zrobię super CV: Napiszę CV i nagram je

Pierwsza nagrywka, w której patrzę na monitor a nie na kamerę i mówię za cicho.
Ale to się poprawi 🙂

Tekst:

https://docs.google.com/presentation/d/1gZ98cILz1eRvEKO6AXrnMQVaXODXdL5wk3aWyeFLquA/edit?usp=sharing

Jak przygotować się do napisania CV

  1. Po pierwsze – po co to robisz? „Chcę dostać pracę”, tak?
    Ale jaką dokładnie?
    Co chcesz robić w tej pracy?
  2. Pewnie już masz listę poprzednich stanowisk (jeśli nie, wiesz co zrobić)
  3. Dla każdego stanowiska na którym wcześniej pracowano poświęć uczciwe kilka minut i pomyśl (wiem, ciężko…) ale pomyśl jakie Twoje najlepsze cechy ta praca wydobywała. Za co otrzymano pochwały, za co koledzy doceniali. np. umiesz rozmawiać z klientem? sypiesz dobrymi pomysłami? Znasz się bardzo dobrze na jakiejś technologii lub programie? Umiesz robić świetne raporty w Excelu? super. napisz właśnie to, a nie: „znajomość Excela w stopniu bardzo dobrym”.
  4. Pomyśl też (znowu pomyśl…), jakie możesz podać przykłady na te wyróżniające Cię rzeczy. Na przykład, mam znajomego który świetnie operuje słowem polskim i angielskim, jest dobrym copywriterem, a do tego potrafi rysować – jak to pokazać? najlepiej na przykładzie. Dodaj do CV próbki swoich prac – bo inaczej czym się wyróżniasz?
  5. nigdy nie pisz tylko CV. Napisz też list motywacyjny – czyli co Cię kręci, daj wiecej przykladow swoich prac lub opisz projekty w ktorych brano udzial i napisz jaki był Twój udział, co było w nich super, czego się nauczono, jakie trudnosci udalo sie pokonać

Jak przygotować portfolio

  1. Zastanów się co chcesz mi przekazać:
    1. Znajomość technik?
    2. Znajomość narzędzi?
    3. Pomysłowość? Koncepcje?
  2. Wybierz 3 do 5 prac.
  3. Wybierz najbardziej dopracowane / dojrzałe
  4. Wybierz spójne praca – jakiś stary projekt od czapki może zaburzyć całokształt, więc pomyśl czy na pewno jest Ci potrzebny.
  5. Lepiej jest zostawić niedosyt niż przesycić

Masz pytania? Pytaj w komentarzach poniżej

Przygotuję [Kurs programowania internetów] dla znajomych

Cel

Nauczenie podstaw programowania i programistycznego myślenia w max. 12 lekcjach na podstawie zaprogramowania gry Game Of Life(GOL) w HTML5 i JavaScript, opcjonalnie z wyświetlaniem na kontrolerze Novation Launchpad 😉

Lekcje

  1. Lekcja 1: HTML, Javascript, CSS po łebkach
    1. Co siedzi w stronach internetowych, czyli HTML, Javascript, CSS – inspektor
    2. konsola
    3. jsBin
  2. Lekcja 2: Dokumentacje, książki, inne zasoby
  3. Lekcja 3: Klocki Javascriptu
    1. Struktury danych – skalary, wektory, obiekty
    2. Struktury kontrolne – if, for, while, funkcje
    3. DOM API – window, document
  4. Lekcja 4: Game of Life na kartce
    1. Jak opisać działanie po polsku, angielsku, po javascriptowemu
    2. Jak odwzorować dane używając dostępnych struktur danych
  5. Lekcja 5: Mechanika niskiego poziomu
    1. Rysowanie planszy
    2. Zapalanie jednego pola
  6. Lekcja 6: Składamy klocki do kupy
    1. Aktualizujemy dane: GOL działa w konsoli
    2. Wyświetlamy dane: GOL działa w HTML
  7. Lekcja 7: Gdzie przechowywać dane, czyli np. stan aplikacji
    1. Co to są te cookies
    2. LocalStorage i inne gadżety
    3. Co to jest AJAX, REST, GraphQL
    4. API Google Sheets
    5. Firebase