Skip to content

Instantly share code, notes, and snippets.

@tbenst
Created February 15, 2020 11:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tbenst/853eb5c017d2e0b00ce11b0716d651da to your computer and use it in GitHub Desktop.
Save tbenst/853eb5c017d2e0b00ce11b0716d651da to your computer and use it in GitHub Desktop.
module WebRTC.MediaStream (
MediaStream(..)
, MediaStreamConstraints(..)
, Blob(..)
, USER_MEDIA()
, getUserMedia
, mediaStreamToBlob
, createObjectURL
) where
-- https://github.com/puffnfresh/purescript-webrtc/blob/master/src/WebRTC/MediaStream.purs
import Prelude (Unit())
import Unsafe.Coerce (unsafeCoerce)
import Effect (Effect)
import Effect.Exception (Error())
foreign import data MediaStream :: Type
foreign import _getUserMedia
:: forall e. (MediaStream -> Effect Unit) ->
(Error -> Effect Unit) ->
MediaStreamConstraints ->
Effect Unit
foreign import data USER_MEDIA :: Effect
getUserMedia :: forall e. MediaStreamConstraints -> Aff (userMedia :: USER_MEDIA | e) MediaStream
getUserMedia c = makeAff (\e s -> _getUserMedia s e c)
newtype MediaStreamConstraints =
MediaStreamConstraints { video :: Boolean
, audio :: Boolean
}
foreign import data Blob :: Type
mediaStreamToBlob :: MediaStream -> Blob
mediaStreamToBlob = unsafeCoerce
foreign import createObjectURL
:: forall e. Blob -> Effect Stringmodule WebRTC.MediaStream (
MediaStream(..)
, MediaStreamConstraints(..)
, Blob(..)
, USER_MEDIA()
, getUserMedia
, mediaStreamToBlob
, createObjectURL
) where
import Prelude (Unit())
import Unsafe.Coerce (unsafeCoerce)
import Control.Monad.Aff (Aff(), makeAff)
import Control.Monad.Eff (Eff())
import Control.Monad.Eff.Exception (Error())
foreign import data MediaStream :: Type
foreign import _getUserMedia
:: forall e. (MediaStream -> Effect Unit) ->
(Error -> Effect Unit) ->
MediaStreamConstraints ->
Effect Unit
foreign import data USER_MEDIA :: Effect
getUserMedia :: forall e. MediaStreamConstraints -> Aff (userMedia :: USER_MEDIA | e) MediaStream
getUserMedia c = makeAff (\e s -> _getUserMedia s e c)
newtype MediaStreamConstraints =
MediaStreamConstraints { video :: Boolean
, audio :: Boolean
}
foreign import data Blob :: Type
mediaStreamToBlob :: MediaStream -> Blob
mediaStreamToBlob = unsafeCoerce
foreign import createObjectURL
:: forall e. Blob -> Effect String
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment