def __init__(self, pid, id, connect): self.pid = pid self.id = id self.connect = connect candidate = farstream.Candidate() candidate.component_id = 1 connect.send_candidate(self.pid, self.id, candidate) connect.send_candidates_done(self.pid, self.id)
def __candidate_from_string(self, string): candidate = farstream.Candidate() (candidate.foundation, component_id, candidate.ip, port, candidate.base_ip, base_port, proto, priority, type, candidate.username, candidate.password) = string.split("|") candidate.component_id = int(component_id) candidate.port = int(port) candidate.base_port = int(base_port) candidate.proto = int(proto) candidate.priority = int(priority) candidate.type = int(type) return candidate
def new_stream(self, id, participant): "Creates a new stream for a specific participant" transmitter_params = {} # If its video, we start at port 9078, to make it more easy # to differentiate it in a tcpdump log if self.source.get_type() == farstream.MEDIA_TYPE_VIDEO and \ TRANSMITTER == "rawudp": cand = farstream.Candidate() cand.component_id = farstream.COMPONENT_RTP cand.port = 9078 transmitter_params["preferred-local-candidates"] = [cand] realstream = self.fssession.new_stream(participant.fsparticipant, farstream.DIRECTION_BOTH) realstream.set_transmitter(TRANSMITTER, transmitter_params) stream = FsUIStream(id, self, participant, realstream) self.streams.append(weakref.ref(stream, self.__stream_finalized)) return stream
def convert_media_candidates(candidates): fscandidates = [] for candidate in candidates: proto = farsight.NETWORK_PROTOCOL_TCP if candidate.transport == "UDP": proto = farsight.NETWORK_PROTOCOL_UDP type = 0 for k, v in types.iteritems(): if v == candidate.type: type = k fscandidate = farsight.Candidate() fscandidate.foundation = candidate.foundation fscandidate.ip = candidate.ip fscandidate.port = candidate.port fscandidate.component_id = candidate.component_id fscandidate.proto = proto fscandidate.type = type fscandidate.username = candidate.username fscandidate.password = candidate.password fscandidate.priority = int(candidate.priority) fscandidates.append(fscandidate) return fscandidates
pipeline = gst.Pipeline() conference = gst.element_factory_make ("fsrtpconference") sdes = conference.get_property("sdes") conference.set_property ("sdes",conference.get_property("sdes").copy().set_value("cname", sys.argv[1] + "@1.2.3.4")) pipeline.add (conference) session = conference.new_session (farstream.MEDIA_TYPE_VIDEO) participant = conference.new_participant () stream = session.new_stream (participant, farstream.DIRECTION_BOTH) stream.set_transmitter("multicast") stream.set_remote_codecs([farstream.Codec(96, "H263-1998", farstream.MEDIA_TYPE_VIDEO, 90000)]) candidate = farstream.Candidate() candidate.ip = "224.0.0.110" candidate.port = 3442 candidate.component_id = farstream.COMPONENT_RTP candidate.proto = farstream.NETWORK_PROTOCOL_UDP candidate.type = farstream.CANDIDATE_TYPE_MULTICAST candidate.ttl = 1 candidate2 = candidate.copy() candidate2.port = 3443 candidate2.component_id = farstream.COMPONENT_RTCP stream.force_remote_candidates ([candidate, candidate2]) videosource = gst.parse_bin_from_description (sys.argv[2] + " ! videoscale", True) pipeline.add (videosource) videosource.get_pad ("src").link(session.get_property ("sink-pad"))