[Bug 703436] New: eos unnormal
GStreamer (bugzilla.gnome.org)
bugzilla at gnome.org
Mon Jul 1 18:37:46 PDT 2013
https://bugzilla.gnome.org/show_bug.cgi?id=703436
GStreamer | don't know | 1.1.1
Summary: eos unnormal
Classification: Platform
Product: GStreamer
Version: 1.1.1
OS/Version: Linux
Status: UNCONFIRMED
Severity: normal
Priority: Normal
Component: don't know
AssignedTo: gstreamer-bugs at lists.freedesktop.org
ReportedBy: 765621965 at qq.com
QAContact: gstreamer-bugs at lists.freedesktop.org
GNOME version: ---
I am in china,and can not send email by normal mailbox,I am sorry .and the
script is :
#!/usr/bin/env python
# -=- encoding: utf-8 -=-
################ VIDEO RECEIVER
import gi
gi.require_version('Gst', '1.0')
import threading
from gi.repository import GObject, Gst
import time, socket, fcntl, struct, logging
Gst.init(None)
class Recorder:
def __init__(self, callid):
self.callid=callid
# create pipeline and rtpbin
self.pipeline = Gst.Pipeline()
self.rtpbin = Gst.ElementFactory.make('rtpbin', 'rtpbin')
self.rtpbin.set_property('latency', 400)
#rtp VIDEO parts elements
self.udpsrc_rtpin_video = Gst.ElementFactory.make('udpsrc', 'udpsrc0')
self.udpsrc_caps_video =
Gst.caps_from_string('application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264')
self.udpsrc_rtpin_video.set_property('caps', self.udpsrc_caps_video)
self.udpsrc_rtcpin_video = Gst.ElementFactory.make('udpsrc', 'udpsrc1')
self.rtp_port_v = self.get_rtp_port_video()
print self.rtp_port_v
self.udpsrc_rtcpin_video.set_property('port',self.rtp_port_v+1)
self.udpsink_rtcpout_video = Gst.ElementFactory.make('udpsink',
'udpsink0')
#rtp AUDIO parts elements
self.udpsrc_rtpin_audio = Gst.ElementFactory.make('udpsrc', 'udpsrc2')
self.udpsrc_caps_audio =
Gst.caps_from_string('application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)PCMU')
self.udpsrc_rtpin_audio.set_property('caps', self.udpsrc_caps_audio)
self.udpsrc_rtcpin_audio = Gst.ElementFactory.make('udpsrc', 'udpsrc3')
self.rtp_port_a = self.get_rtp_port_audio()
self.udpsrc_rtcpin_audio.set_property('port',self.rtp_port_a+1)
self.udpsink_rtcpout_audio = Gst.ElementFactory.make('udpsink',
'udpsink1')
#VIDEO dealing elements
self.rtph264depay = Gst.ElementFactory.make('rtph264depay', 'rtpdepay')
self.h264parse = Gst.ElementFactory.make('h264parse','h264parse')
self.q1 = Gst.ElementFactory.make("queue", "q1")
self.q2 = Gst.ElementFactory.make("queue", "q2")
#AUDIO dealing elements
self.pcmudepay = Gst.ElementFactory.make('rtppcmudepay','rtppcmudepay')
self.mulawdec = Gst.ElementFactory.make('mulawdec','mulawdec')
self.audioresample =
Gst.ElementFactory.make('audioresample','audioresample')
self.faac = Gst.ElementFactory.make('faac','faac')
#mp4mux and filesink elements
self.mp4mux = Gst.ElementFactory.make('mp4mux', 'mp4mux')
self.filesink = Gst.ElementFactory.make('filesink', 'filesink')
curr_time = time.strftime('%Y-%m-%d
%H:%M:%S',time.localtime(time.time()))
filename = str(callid) + ' ' + curr_time + '.mp4'
self.filesink.set_property('location', filename)
#add the elements into the pipeline
self.pipeline.add(self.rtpbin)
self.pipeline.add(self.udpsrc_rtpin_video)
self.pipeline.add(self.udpsrc_rtcpin_video)
self.pipeline.add(self.udpsink_rtcpout_video)
self.pipeline.add(self.udpsrc_rtpin_audio)
self.pipeline.add(self.udpsrc_rtcpin_audio)
self.pipeline.add(self.udpsink_rtcpout_audio)
self.pipeline.add(self.pcmudepay)
self.pipeline.add(self.mulawdec)
self.pipeline.add(self.audioresample)
self.pipeline.add(self.faac)
self.pipeline.add(self.rtph264depay)
self.pipeline.add(self.h264parse)
self.pipeline.add(self.mp4mux)
self.pipeline.add(self.filesink)
self.pipeline.add(self.q1)
self.pipeline.add(self.q2)
# Receive the VIDEO RTP and RTCP streams
self.udpsrc_rtpin_video.link_pads('src',self.rtpbin ,
'recv_rtp_sink_0')
self.udpsrc_rtcpin_video.link_pads('src', self.rtpbin,
'recv_rtcp_sink_0')
# Receive the AUDIO RTP and RTCP streams
self.udpsrc_rtpin_audio.link_pads('src',self.rtpbin ,
'recv_rtp_sink_1')
self.udpsrc_rtcpin_audio.link_pads('src', self.rtpbin,
'recv_rtcp_sink_1')
# reply with RTCP stream
self.rtpbin.link_pads('send_rtcp_src_0', self.udpsink_rtcpout_video,
'sink')
self.rtpbin.link_pads('send_rtcp_src_1', self.udpsink_rtcpout_audio,
'sink')
#Link them
self.rtpbin.connect('pad-added', self.rtpbin_pad_added)
self.rtph264depay.link_pads('src',self.h264parse,'sink')
self.pcmudepay.link(self.mulawdec)
self.mulawdec.link(self.audioresample)
self.audioresample.link(self.lame)
self.h264parse.link(self.q1)
self.q1.link_pads('src',self.mp4mux,'video_0')
self.faac.link(self.q2)
self.q2.link_pads('src',self.mp4mux,'audio_0')
self.mp4mux.link(self.filesink)
self.bus = self.pipeline.get_bus()
self.bus.add_signal_watch()
def eos(self):
print "eos()"
self.bus.add_signal_watch()
print self.pipeline.send_event(Gst.Event.new_eos())
def on_eos(self, bus, msg):
print "on_eos()"
bus.remove_signal_watch()
self.pipeline.set_state(Gst.State.NULL)
def rtpbin_pad_added(self,obj, pad):
print "PAD ADDED"
pad_name = pad.get_name()
if pad_name[0:14] == 'recv_rtp_src_0':
v_pad = self.rtph264depay.get_static_pad("sink")
pad.link(v_pad)
print "Video stream is coming"
elif pad_name[0:14] == 'recv_rtp_src_1':
a_pad = self.pcmudepay.get_static_pad("sink")
pad.link(a_pad)
print "audio stream is coming"
def get_rtp_port_video(self):
self.udpsrc_rtpin_video.set_property('port', 0)
self.udpsrc_rtpin_video.set_state(Gst.State.PAUSED)
port_video = self.udpsrc_rtpin_video.get_property('port')
self.udpsrc_rtpin_video.set_state(Gst.State.NULL)
return port_video
def get_rtp_port_audio(self):
self.udpsrc_rtpin_audio.set_property('port', 0)
self.udpsrc_rtpin_audio.set_state(Gst.State.PAUSED)
port_audio = self.udpsrc_rtpin_audio.get_property('port')
self.udpsrc_rtpin_audio.set_state(Gst.State.NULL)
return port_audio
def get_local_address(self):
rtp_port_v = self.rtp_port_v
rtp_port_a = self.rtp_port_a
address = (get_ip_address('eth0'),rtp_port_a,rtp_port_a+1,rtp_port_v,
rtp_port_v+1)
return address
def start_stream(self):
self.log()
self.pipeline.set_state(Gst.State.PLAYING)
self.udpsink_rtcpout_audio.set_locked_state(Gst.State.PLAYING)
self.udpsink_rtcpout_video.set_locked_state(Gst.State.PLAYING)
print "Started..."
print "Running..."
def stop_stream(self):
self.eos()
time.sleep(10)
print "stop"
self.filesink.set_state(Gst.State.NULL)
def get_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack('256s', ifname[:15])
)[20:24])
if __name__ == '__main__':
R = Recorder(111)
R.get_local_address()
R.start_stream()
--
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
More information about the gstreamer-bugs
mailing list