Media device permissions in the browser are a tricky beast, and the levels of support also differ across browsers. This article covers some of the basics of identifying device permissions, and also calls out a few of the challenges you're likely to face during implementation.
NgRx Store provides us a single stream of actions where we can either dispatch or subscribe any action across our whole app. This action stream is an Observable.
NgRx Effects allow us to listen for particular action types, and "do something" when that action happens. Any effect you write is also an Observable.
An effect is an Observable which uses the Action Stream as its source, and also as its destination. That is, an effect subscribes to the Action Stream, and it can also publish to the Action Stream.