def __on_stream_get_codec_config(self, channel, stream_id, media_type,
                                     direction):
        """
        On signal "stream-get-codec-config", we returns our codec configuration
        """

        print
        print "=== %s __on_stream_get_codec_config ===" % self
        print

        if media_type == farsight.MEDIA_TYPE_VIDEO:

            codecs = [
                farsight.Codec(farsight.CODEC_ID_ANY, "JPEG",
                               farsight.MEDIA_TYPE_VIDEO, 0),
            ]

            if self.conn.GetProtocol() == "sip":
                codecs += [
                    farsight.Codec(farsight.CODEC_ID_DISABLE, "THEORA",
                                   farsight.MEDIA_TYPE_VIDEO, 0)
                ]
            else:
                codecs += [
                    farsight.Codec(farsight.CODEC_ID_ANY, "THEORA",
                                   farsight.MEDIA_TYPE_VIDEO, 0)
                ]

            return codecs
        else:
            return None
 def send_local_codecs(self):
     print "Send local codecs to %s for media %s" % (self.pid, self.id)
     self.connect.send_codecs(self.pid, self.id,
                              [farsight.Codec(self.connect.myid,
                                              "local_codec",
                                              self.pid,
                                              self.id)])
 def codecs(self, codecs):
     if self.connect.myid != 1:
         self.connect.send_codecs(1, self.id,
                                 [farsight.Codec(self.connect.myid,
                                                "codec-name",
                                                self.pid,
                                                self.id)])
Exemple #4
0
    def get_codec_config(self, channel, stream_id, media_type, direction):
        print "got codec config"
        if media_type == farsight.MEDIA_TYPE_VIDEO:
            codecs = [
                farsight.Codec(farsight.CODEC_ID_ANY, "H264",
                               farsight.MEDIA_TYPE_VIDEO, 0)
            ]
            if self.conn.GetProtocol() == "sip":
                codecs += [
                    farsight.Codec(farsight.CODEC_ID_DISABLE, "THEORA",
                                   farsight.MEDIA_TYPE_VIDEO, 0)
                ]
            else:
                codecs += [
                    farsight.Codec(farsight.CODEC_ID_ANY, "THEORA",
                                   farsight.MEDIA_TYPE_VIDEO, 0)
                ]
            codecs += [
                farsight.Codec(farsight.CODEC_ID_ANY, "H263",
                               farsight.MEDIA_TYPE_VIDEO, 0),
                farsight.Codec(farsight.CODEC_ID_DISABLE, "DV",
                               farsight.MEDIA_TYPE_VIDEO, 0),
                farsight.Codec(farsight.CODEC_ID_ANY, "JPEG",
                               farsight.MEDIA_TYPE_VIDEO, 0),
                farsight.Codec(farsight.CODEC_ID_ANY, "MPV",
                               farsight.MEDIA_TYPE_VIDEO, 0),
            ]

            return codecs
        else:
            return None
Exemple #5
0
def convert_media_codecs(codecs, name):
    fscodecs = []
    media_type = media_types[name]
    for codec in codecs:
        fscodec = farsight.Codec(codec.payload, codec.encoding, media_type,
                                 codec.clockrate)
        fscodec.optional_params = codec.params.items()
        fscodecs.append(fscodec)
    return fscodecs
Exemple #6
0
    def __init__(self, conference, source):
        self.conference = conference
        self.source = source
        self.streams = []
        self.fssession = conference.new_session(source.get_type())
        self.fssession.uisession = self
        if source.get_type() == farsight.MEDIA_TYPE_VIDEO:
            # We prefer H263-1998 because we know it works
            # We don't know if the others do work
            # We know H264 doesn't work for now or anything else
            # that needs to send config data
            self.fssession.set_codec_preferences( [ \
                farsight.Codec(farsight.CODEC_ID_DISABLE,
                               "THEORA",
                               farsight.MEDIA_TYPE_VIDEO,
                               90000),
                farsight.Codec(farsight.CODEC_ID_DISABLE,
                               "H264",
                               farsight.MEDIA_TYPE_VIDEO,
                               0),
                farsight.Codec(farsight.CODEC_ID_ANY,
                               "H263-1998",
                               farsight.MEDIA_TYPE_VIDEO,
                               0),
                farsight.Codec(farsight.CODEC_ID_ANY,
                               "H263",
                               farsight.MEDIA_TYPE_VIDEO,
                               0)
                ])
        elif source.get_type() == farsight.MEDIA_TYPE_AUDIO:
            self.fssession.set_codec_preferences( [ \
                farsight.Codec(farsight.CODEC_ID_ANY,
                               "PCMA",
                               farsight.MEDIA_TYPE_AUDIO,
                               0),
                farsight.Codec(farsight.CODEC_ID_ANY,
                               "PCMU",
                               farsight.MEDIA_TYPE_AUDIO,
                               0),
                # The gst speexenc element breaks timestamps
                farsight.Codec(farsight.CODEC_ID_DISABLE,
                               "SPEEX",
                               farsight.MEDIA_TYPE_AUDIO,
                               16000),
                # Sadly, vorbis is not currently compatible with live streaming :-(
                farsight.Codec(farsight.CODEC_ID_DISABLE,
                               "VORBIS",
                               farsight.MEDIA_TYPE_AUDIO,
                               0),
                ])

        self.sourcepad = self.source.get_src_pad()
        self.sourcepad.link(self.fssession.get_property("sink-pad"))
 def __codecs_from_string(self, string):
     codecs = []
     for substring in string.split("\n"):
         (start,end) = substring.split("|")
         (id, encoding_name, media_type, clock_rate, channels) = start.split(" ")
         codec = farsight.Codec(int(id), encoding_name, int(media_type),
                            int(clock_rate))
         codec.channels = int(channels)
         if len(end):
             codec.optional_params = \
               [tuple(x.split("=",1)) for x in end.split(";") if len(x) > 0]
         codecs.append(codec)
     return codecs
Exemple #8
0
pygst.require('0.10')
import farsight, gst, gobject, sys

loop = gobject.MainLoop()
pipeline = gst.Pipeline()

conference = gst.element_factory_make ("fsrtpconference")
conference.set_property ("sdes-cname", sys.argv[1] + "@1.2.3.4")
pipeline.add (conference)

session = conference.new_session (farsight.MEDIA_TYPE_VIDEO)
participant = conference.new_participant (sys.argv[2]+"@1.2.3.4")
stream = session.new_stream (participant, farsight.DIRECTION_BOTH, "multicast")

stream.set_remote_codecs([farsight.Codec(96, "H263-1998",
                                         farsight.MEDIA_TYPE_VIDEO,
                                         90000)])
candidate = farsight.Candidate()
candidate.ip = "224.0.0.110"
candidate.port = 3442
candidate.component_id = farsight.COMPONENT_RTP
candidate.proto = farsight.NETWORK_PROTOCOL_UDP
candidate.type = farsight.CANDIDATE_TYPE_MULTICAST
candidate.ttl = 1

candidate2 = candidate.copy()
candidate2.port = 3443
candidate2.component_id = farsight.COMPONENT_RTCP
stream.set_remote_candidates ([candidate, candidate2])

videosource = gst.parse_bin_from_description (sys.argv[3] + " ! videoscale", True)
Exemple #9
0
def build_codecs(type):
    codecs = []
    for args in codecs_definitions[type]:
        codec = farsight.Codec(*args)
        codecs.append(codec)
    return codecs
 def get_codecs(self):
     return [farsight.Codec(self.connect.myid,
                            "nego-codecs",
                            self.pid,
                            self.id)]