Archives:

webassembly and web audio worklet No ratings yet.

Some notes: web assembly: a cool technology allows you to compile c/c++/rust and other languages into wasm, expose API to javascript world. Web audio worklet/worker: allows developer to intercept audio stream/custom processing A good introduction is at: https://developers.google.com/web/updates/2017/12/audio-worklet Advance pattern: https://developers.google.com/web/updates/2018/06/audio-worklet-design-pattern https://github.com/GoogleChromeLabs/web-audio-samples/tree/master/audio-worklet/design-pattern/shared-buffer/     Combination of wasm and audio worklet can do a fair amount • Read More »


How to use gradle to build java app/project from command line No ratings yet.

Install gradle ( on debian 10) Follow https://linux4one.com/how-to-install-gradle-on-debian-10/ download latest gradle at: https://gradle.org/releases/ for example: wget https://services.gradle.org/distributions/gradle-6.2.1-bin.zip -P /tmp sudo unzip -d /opt/gradle /tmp/gradle-6.2.1.zip sudo nano /etc/profile.d/gradle.sh export GRADLE_HOME=/opt/gradle/gradle-6.2.1 export PATH=${GRADLE_HOME}/bin:${PATH} sudo chmod +x /etc/profile.d/gradle.sh source /etc/profile.d/gradle.sh gradle -v   Try gradle demo Follow https://guides.gradle.org/building-java-applications/ mkdir demo cd demo gradle init # setup gralde project • Read More »


C++ how to replace mutex code with CAS ( compare and exchange ) ( lock-less programming ) 5/5 (2)

It is well known that if  mutex protected codes could potentially be replaced by atomic compare exchange,  thus we cab achieve lock-less programming. In practice, it may need several techniques to get it working. Let’s look at a subscription example: Normal mutex An subscriber  can subscribe some content from a publisher, in other word, a publisher • Read More »


Janus Video Room plugin (how webrtc sfu works) 5/5 (1)

Repo: https://github.com/meetecho/janus-gateway code: video sfu code at: plugins/janus_videoroom.c How sub/pub works: in its plugin implementation: plugins/janus_videoroom.c , there is: struct janus_videoroom_publisher { GSList subscribers; / Subscriptions to this publisher (who’s watching this publisher) */ GSList subscriptions; / Subscriptions this publisher has created (who this publisher is watching) */ } for every incoming  rtp from a publisher: • Read More »


how to cherry-pick a merge commit 5/5 (2)

Problem: For example: I have a merge in main dev branch, I want to cherry-pick that merge into a relatively old prod branch, If we directly do: git cherry-pick merge_commit_in_dev_branch, we will get a  error:  is a merge but no -m option was given. Solution So we need to do this: git cherry-pick -m 1  • Read More »


How to synchronize audio video stream (a/v sync) 4.5/5 (2)

How to a/v sync in IETF RFC? The RFC specified how to do a/v sycn generally in  https://tools.ietf.org/html/rfc6051 RTP flows are synchronised by receivers based on information that is contained in RTCP SR packets generated by senders (specifically, the NTP-format timestamp and the RTP timestamp). Synchronisation requires that a common reference clock MUST be used • Read More »


how to submit a patch to google’s webrtc native 5/5 (1)

I recently submitted a patch to webrtc native. https://webrtc-review.googlesource.com/c/src/+/143841 https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!topic/discuss-webrtc/zn4kmjflvt4 The process is not that difficult, but there could be some caveats depending on your os version etc. Here is my notes/steps:   Read official doc Basically you should follow this official doc is at: https://webrtc.org/contributing/   install depot_tools mkdir webrtc && cd webrtc $ git clone • Read More »


vim how to install vim-grammarous plugin ( grammar check ) 5/5 (2)

vim has a grammar check plugin https://github.com/rhysd/vim-grammarous How to install vim-grammarous? it uses new vim 8+ plugin mechanism, so we can easily install it by: mkdir -p ~/.vim/pack/bundle/start cd ~/.vim/pack/bundle/start git clone https://github.com/rhysd/vim-grammarous   The first time you run the: GrammarousCheck in the vim, it will auto download the languagetool (java jar) etc. How to • Read More »


H.264 profile-level-id, packetization-mode, NAL, I-frame, I-slice 5/5 (3)

H.264 profile-level-id in sdp: profile-level-id = 428014  ( remember SDP use hex, wiki/h264 they use decimal ) profile_idc 0x42 == 66 so it is Baseline profile profile-iop 0x80 mean constraint_set0_flag=1 (so it is Constrained Baseline profile) and others 0 level-idc 0x14 == 20 so it is Level 2.0 https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC described the details of h264 profile, level. Profiles • Read More »


c++ coroutine 5/5 (1)

Coroutines Internals https://www.boost.org/doc/libs/1_70_0/libs/coroutine2/doc/html/index.html https://theboostcpplibraries.com/boost.coroutine https://www.netways.de/en/blog/2019/04/04/modern-c-programming-coroutines-with-boost/ Coroutines introduction Your first coroutine co_awaiting coroutines   https://en.cppreference.com/w/cpp/language/coroutines   Please rate this rating