Beispiel #1
0
    def __init__(self, port, width, height, IS_DEBUG):
        port_str = str(port)
        self.is_push_buffer_allowed = False
        self.port = port
        self.url = f"http://127.0.0.1:{port}/fitness"
        self.pipe = None
        self.IS_DEBUG = IS_DEBUG
        self.server = GstRtspServer.RTSPServer().new()
        self.server.set_service(port_str)
        self.server.connect("client-connected", self.client_connected)

        self.f = GstRtspServer.RTSPMediaFactory().new()
        self.f.set_eos_shutdown(True)
        if self.IS_DEBUG == 0:
            self.f.set_launch(get_pipe(width, height))
        else:
            self.f.set_launch(get_pipe_test(width, height))

        self.f.set_shared(True)
        self.f.connect("media-constructed", self.on_media_constructed)

        m = self.server.get_mount_points()
        m.add_factory("/fitness", self.f)
        self.server.attach(None)

        logger.info(f"[RTSP] ready at {self.url}")
Beispiel #2
0
def make_server(launch: str, port: int = 8554, url: str = '/test'):
    # GObject.type_register(Factory)

    # loop = GLib.MainLoop()
    rtsp = GstRtspServer.RTSPServer()
    rtsp.set_service(str(port))
    #g_object_set(server, "service", port, NULL);
    mp = rtsp.get_mount_points()
    factory = GstRtspServer.RTSPMediaFactory()
    factory.set_launch(launch)
    # str(GstBuilder(
    #     'tcambin name=source',
    #     '\'video/x-raw,format=RGBx,width=1280,height=720,framerate=(fraction)60/1\''
    #     #'capsfilter name=filter',
    #     'videoconvert',
    #     '\'video/x-raw,format=I420\'',
    #     'videoconvert',
    #     'x264enc qp-min=18 speed-preset=superfast ! h264parse ! rtph264pay  name=pay0 pt=96 config-interval=1'
    # )))
    factory.set_shared(True)
    # mf = factory.g_type_instance
    mp.add_factory(url, factory)
    mp = None
    rtsp.attach(None)
    media = factory.construct(url)
    media.set_reusable(True)
    return media.pipeline
Beispiel #3
0
    def _add_media(self, file_path, directory_root):
        file = directory_root / file_path[1:]
        if not vstreamer_utils.is_video_file(file):
            raise ValueError("'%s' is not a valid video file" % str(file))

        demuxer = VideoServer._corresponding_demuxer(file)
        pipeline = "filesrc location=\"%s\" ! %s name=dmux " \
                   "dmux.video_0 ! queue ! rtph264pay name=pay0 pt=96 " \
                   "dmux.audio_0 ! queue ! rtpmp4apay name=pay1" % (file, demuxer)
        factory = GstRtspServer.RTSPMediaFactory()
        factory.set_launch(pipeline)
        factory.set_shared(True)
        encoded = urllib.parse.quote(file_path)
        self.server.get_mount_points().add_factory(encoded, factory)
        vstreamer_utils.log_info("Added '%s' to video server mount points" % str(file_path))
Beispiel #4
0
 def __call__(self):
     self.server = GstRtspServer.RTSPServer()
     self.server.set_service(self.port)
     self.server.set_address(self.ip)
     self.factory = GstRtspServer.RTSPMediaFactory()
     self.factory.set_launch("( {} )".format(self.pipeline))
     self.factory.set_shared(True)
     self.factory.props.latency = 50
     self.server.get_mount_points().add_factory("/{}".format(self.mount), self.factory)
     self.server_id = self.server.attach(None)
     if self.server_id == 0:
         logging.debug("Return value: {}".format(self.server_id))
         logging.debug("SNAFU. Exiting...")
         sys.exit(-1)
     logging.info("stream ready at rtsp://{}:{}/{}".format(self.server.get_address(),
                                                           self.server.get_service(),
                                                           self.mount))
Beispiel #5
0
    def __init__(self, port, width, height, fps, device_path):
        port_str = str(port)
        pipe = get_pipeline(width, height, fps)
        self.pipe = None

        self.server = GstRtspServer.RTSPServer().new()
        self.server.set_service(port_str)
        self.server.connect("client-connected", self.client_connected)

        self.f = GstRtspServer.RTSPMediaFactory().new()
        self.f.set_eos_shutdown(True)
        self.f.set_launch(pipe)
        self.f.set_shared(True)
        self.f.connect("media-constructed", self.on_media_constructed)
        self.device_path = device_path

        m = self.server.get_mount_points()
        m.add_factory(DEFAULT_URI, self.f)
        self.server.attach(None)
Beispiel #6
0
    def runServer(self):
        self.logger.info("Server wird gestartet")
        self.__ml = GLib.MainLoop()
        self.__srv = GstRtspServer.RTSPServer()
        self.__srv.connect("client-connected", self.client_connected_call)
        mounts = self.__srv.get_mount_points()
        self.__fac = GstRtspServer.RTSPMediaFactory()
        self.__srv.set_address("0.0.0.0")
        self.__fac.set_shared(True)
        # Bitrate * Sekunden // 8
        self.__fac.set_buffer_size((17000000 * 1 // 8))  # was // 8 )/2)
        self.__fac.set_latency(250)
        self.__fac.set_launch(
            '( filesrc location=/tmp/motion-gst-pipe do-timestamp=true ! video/x-h264, framerate={}/1 ! h264parse ! rtph264pay name=pay0 pt=96 )'
            .format(self._fps))
        mounts.add_factory("/h264", self.__fac)

        self.__srv.attach(None)
        self.__ml.run()
        self.logger.info("Server beendet")
Beispiel #7
0
    def __init__(self,ip="0.0.0.0",port="8554",factory="/test",
                 gst_str=" videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 "):
        self.server = GstRtspServer.RTSPServer.new()
        self.address = ip
        self.port = port

        self.launch_description = gst_str

        self.server.set_address(self.address)
        self.server.set_service(self.port)
        self.server.connect("client-connected", self.client_connected)

        self.factory = GstRtspServer.RTSPMediaFactory().new()
        self.factory.set_launch(self.launch_description)
        #self.factory.set_latency(0)
        self.factory.set_shared(True)
        #self.factory.set_transport_mode(GstRtspServer.RTSPTransportMode.PLAY)
        self.mount_points = self.server.get_mount_points()
        self.mount_points.add_factory(factory, self.factory)

        self.server.attach(None)
        print('Stream ready')
Beispiel #8
0
    def addMedia(self, videos, bitrate, framerate, path):
        '''
		Add videos to the server.

		:param list videos: List of available videos.
		:param int bitrate: The bitrate (in kbps).
		:param int framerate: The framerate (in fps).
		:param string path: Path to the video directory.
		'''
        for i, video in enumerate(videos):
            for codec, items in supported_codecs.iteritems():
                launch = 'filesrc location=%s/%s ! decodebin ! videorate ! video/x-raw,framerate=%s/1 ! %s bitrate=%s ! %s name=pay0' % (
                    path, video, framerate, items['encoder'],
                    items['bitrate_from_kbps'](bitrate), items['rtppay'])
                pool = GstRtspServer.RTSPAddressPool()
                pool.add_range("224.3.0.0", "224.3.0.10", 5000, 5010, 10)
                factory = GstRtspServer.RTSPMediaFactory()
                factory.set_address_pool(pool)
                factory.set_launch(launch)
                factory.set_shared(True)
                factory.set_eos_shutdown(True)
                name = '/video%s.' % (i) + codec
                self.server.get_mount_points().add_factory(name, factory)
def main(args):

    config_path = args.config_path

    parser = ConfigObj(config_path)

    file_location = parser['file_location']
    rstp_host = parser['host']
    rstp_port = parser['port']
    factory_name = parser['factory_name']

    Gst.init(None)
    mainloop = GObject.MainLoop()

    server = GstRtspServer.RTSPServer.new()

    server.set_address(rstp_host)
    server.set_service(rstp_port)

    mounts = server.get_mount_points()

    factory = GstRtspServer.RTSPMediaFactory()
    factory.set_launch(
        'filesrc location =%s ! qtdemux ! h264parse config-interval=-1 ! rtph264pay pt=96 config-interval=-1 name=pay0'
        % (file_location))
    factory.set_shared(True)
    factory.set_buffer_size(4294967295)
    #factory.set_protocols(GstRtsp.RTSPLowerTrans(1))
    #factory.set_transport_mode(GstRtspServer.RTSPTransportMode.PLAY)

    mounts.add_factory(factory_name, factory)

    server.attach(None)

    print("Stream ready at rtsp://%s:%s%s" %
          (rstp_host, rstp_port, factory_name))
    mainloop.run()
Beispiel #10
0
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

import gi
gi.require_version('Gst', '1.0')
from gi.repository import GObject, Gst, GstVideo, GstRtspServer

Gst.init(None)

mainloop = GObject.MainLoop()

server = GstRtspServer.RTSPServer()

mounts = server.get_mount_points()

factory = GstRtspServer.RTSPMediaFactory()
factory.set_launch(
    '( videotestsrc is-live=1 ! x264enc speed-preset=ultrafast tune=zerolatency ! rtph264pay name=pay0 pt=96 )'
)

mounts.add_factory("/test", factory)

server.attach(None)

print "stream ready at rtsp://127.0.0.1:8554/test"
mainloop.run()