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))
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
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))
# 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