mediabus-rtp-0.2.0.0: src/Data/MediaBus/Rtp/AlawSource.hs
module Data.MediaBus.Rtp.AlawSource ( rtpAlaw16kHzS16Source ) where
import Conduit
import Data.MediaBus.Audio.Raw
import Data.MediaBus.Audio.Resample
import Data.MediaBus.Segment
import Data.MediaBus.Clock
import Data.MediaBus.Reorder
import Data.MediaBus.Rtp.Source
import Data.MediaBus.Rtp.Packet
import Data.MediaBus.Sample
import Data.MediaBus.Stream
import Data.MediaBus.StreamSegment
import Data.MediaBus.SourceId
import Data.MediaBus.Conduit
import Data.MediaBus.Ticks
import Data.MediaBus.Transcoder
import Data.MediaBus.Transport.Udp
import Data.Streaming.Network ( HostPreference )
import Data.Word
import Data.Proxy
import qualified Data.ByteString as B
import Network.Socket ( SockAddr )
rtpAlaw16kHzS16Source :: MonadResource m
=> Int
-> HostPreference
-> Int
-> Source m (Stream RtpSsrc RtpSeqNum (Ticks 16000 Word64) () (Segment (640 :@ 16000) (SampleBuffer (S16 16000))))
rtpAlaw16kHzS16Source !udpListenPort !udpListenIP !reorderBufferSize =
annotateTypeSource (Proxy :: Proxy (Stream (SourceId (Maybe SockAddr)) RtpSeqNum (ClockTimeDiff UtcClock) () B.ByteString))
(udpDatagramSource useUtcClock udpListenPort udpListenIP) .|
rtpSource .|
rtpPayloadDemux [ (8, alawPayloadHandler) ] mempty .|
transcodeStreamC' .|
resample8to16kHz' (MkS16 0 :: S16 8000) .|
convertTicksC' at8kHzU32 at16kHzU64 .|
reorderFramesBySeqNumC reorderBufferSize .|
segmentC