Example #1
0
    def _remote_handler_eb(self, failure, ms_id, trans_id):
        if log.isEnabledFor(logging.DEBUG):
            log.info('remote call failure: %s',
                     failure.value,
                     exc_info=(failure.type, failure.value,
                               failure.getTracebackObject()))
        else:
            log.info('remote call failure: %s', failure.value)

        fatal = False
        if failure.check(CallResultError):
            body = self.encode_amf('_error', trans_id,
                                   *failure.value.get_error_args())
            fatal = failure.value.is_fatal
        else:
            err = amf0.Object(code='NetStream.Failed',
                              level='error',
                              description=repr(failure.value))
            body = self.encode_amf('_error', trans_id, None, err)

        ts = ms_time_wrapped(self.session_time())
        self.muxer.sendMessage(ts, chunks.MSG_COMMAND, ms_id, body)

        if fatal:
            self.transport.loseConnection()
    def write_rtmp_meta_headers(self, ts):
        meta = dict(duration=0.0)

        if self.vsink:
            meta.update(width=self.width,
                        height=self.height,
                        framerate=(float(self.framerate.numerator) /
                                   self.framerate.denominator),
                        videodatarate=self.video_bitrate,
                        videokeyframe_frequency=self.key_rate)
            if self.video_codec.codecId == 7:
                meta.update(videocodecid='avc1',
                            avcprofile=self.video_avc_profile,
                            avclevel=self.video_avc_level)

        if self.asink:
            meta.update(audiosamplerate=self.audio_rate,
                        audiodatarate=self.audio_bitrate,
                        audiochannels=self.channels)
            if self.audio_codec.codecId == 2:
                meta.update(audiocodecid='.mp3')
            elif self.audio_codec.codecId == 10:
                meta.update(audiocodecid='mp4a')

        wm = self._stream.write_meta
        wm(ts, amf0.encode('onStatus',
                           amf0.Object(code='NetStream.Data.Start')))
        wm(ts, amf0.encode('onMetaData', meta))
        wm(ts, amf0.encode('@setDataFrame', 'onMetaData', meta))
Example #3
0
    def make_connect_params(self, **kw):
        app_params = self._app.get_connect_params()
        factory_params = self.factory.get_connect_params()

        params = amf0.Object(app_params)

        for k, v in factory_params.items():
            setattr(params, k, v)

        for k, v in kw.items():
            setattr(params, k, v)

        return params
Example #4
0
 def get_error_args(self):
     dsc = self.__doc__
     if self.args:
         dsc = '%s: %s' % (dsc, self.args[0])
     return (None,
             amf0.Object(level=self.level, code=self.code, description=dsc))
Example #5
0
    # short string
    ('02 0003 616263', ['abc']),
    ('02 0001 01', ['\x01']),
    ('02 0000', ['']),

    # short unicode string
    ('02 0005 c48562c487', [u'\u0105b\u0107']),

    # object, simple properties
    (
        '03'  # object marker
        '000162 003ff0000000000000'  # .b = 1.0
        '000161 004008000000000000'  # .a = 3.0
        '000163 004000000000000000'  # .c = 2.0
        '000009',  # empty name + end marker
        [amf0.Object(a=3.0, b=1.0, c=2.0)]),
    # ...
    (
        '03'  # object marker
        '000009',  # empty name + end marker
        [amf0.Object()]),
    ('03'
     '000a636c6173735f6e616d65 0200064f626a656374'
     '000009', [amf0.Object(class_name='Object')]),

    # skip movieclip - not supported

    # null
    ('05', [None]),

    # undefined