summaryrefslogtreecommitdiff
path: root/tests/examples/rtp/server-alsasrc-PCMA.py
blob: 099d79e49d8357d12854ce31a150baa23c1e3661 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#! /usr/bin/env python 

import gobject, pygst
pygst.require("0.10")
import gst 

#gst-launch -v gstrtpbin name=rtpbin audiotestsrc ! audioconvert ! alawenc ! rtppcmapay ! rtpbin.send_rtp_sink_0 \
#                rtpbin.send_rtp_src_0 ! udpsink port=10000 host=xxx.xxx.xxx.xxx \
#                rtpbin.send_rtcp_src_0 ! udpsink port=10001 host=xxx.xxx.xxx.xxx sync=false async=false \
#                udpsrc port=10002 ! rtpbin.recv_rtcp_sink_0 

DEST_HOST = '127.0.0.1'

AUDIO_SRC = 'audiotestsrc'
AUDIO_ENC = 'alawenc'
AUDIO_PAY = 'rtppcmapay'

RTP_SEND_PORT = 5002
RTCP_SEND_PORT = 5003
RTCP_RECV_PORT = 5007 

# the pipeline to hold everything
pipeline = gst.Pipeline('rtp_server')

# the pipeline to hold everything
audiosrc = gst.element_factory_make(AUDIO_SRC, 'audiosrc')
audioconv = gst.element_factory_make('audioconvert', 'audioconv')
audiores = gst.element_factory_make('audioresample', 'audiores')

# the pipeline to hold everything
audioenc = gst.element_factory_make(AUDIO_ENC, 'audioenc')
audiopay = gst.element_factory_make(AUDIO_PAY, 'audiopay')

# add capture and payloading to the pipeline and link
pipeline.add(audiosrc, audioconv, audiores, audioenc, audiopay)

res = gst.element_link_many(audiosrc, audioconv, audiores, audioenc, audiopay)

# the rtpbin element
rtpbin = gst.element_factory_make('gstrtpbin', 'rtpbin')

pipeline.add(rtpbin) 

# the udp sinks and source we will use for RTP and RTCP
rtpsink = gst.element_factory_make('udpsink', 'rtpsink')
rtpsink.set_property('port', RTP_SEND_PORT)
rtpsink.set_property('host', DEST_HOST)

rtcpsink = gst.element_factory_make('udpsink', 'rtcpsink')
rtcpsink.set_property('port', RTCP_SEND_PORT)
rtcpsink.set_property('host', DEST_HOST)
# no need for synchronisation or preroll on the RTCP sink
rtcpsink.set_property('async', False)
rtcpsink.set_property('sync', False) 

rtcpsrc = gst.element_factory_make('udpsrc', 'rtcpsrc')
rtcpsrc.set_property('port', RTCP_RECV_PORT)

pipeline.add(rtpsink, rtcpsink, rtcpsrc) 

# now link all to the rtpbin, start by getting an RTP sinkpad for session 0
sinkpad = gst.Element.get_request_pad(rtpbin, 'send_rtp_sink_0')
srcpad = gst.Element.get_static_pad(audiopay, 'src')
lres = gst.Pad.link(srcpad, sinkpad)

# get the RTP srcpad that was created when we requested the sinkpad above and
# link it to the rtpsink sinkpad
srcpad = gst.Element.get_static_pad(rtpbin, 'send_rtp_src_0')
sinkpad = gst.Element.get_static_pad(rtpsink, 'sink')
lres = gst.Pad.link(srcpad, sinkpad)

# get an RTCP srcpad for sending RTCP to the receiver
srcpad = gst.Element.get_request_pad(rtpbin, 'send_rtcp_src_0')
sinkpad = gst.Element.get_static_pad(rtcpsink, 'sink')
lres = gst.Pad.link(srcpad, sinkpad)

# we also want to receive RTCP, request an RTCP sinkpad for session 0 and
# link it to the srcpad of the udpsrc for RTCP
srcpad = gst.Element.get_static_pad(rtcpsrc, 'src')
sinkpad = gst.Element.get_request_pad(rtpbin, 'recv_rtcp_sink_0')
lres = gst.Pad.link(srcpad, sinkpad)

# set the pipeline to playing
gst.Element.set_state(pipeline, gst.STATE_PLAYING)

# we need to run a GLib main loop to get the messages
mainloop = gobject.MainLoop()
mainloop.run() 

gst.Element.set_state(pipeline, gst.STATE_NULL)