def body(self, value): size = len(value) librtmp.RTMPPacket_Alloc(self.packet, size) view = ffi.buffer(self.packet.m_body, size) view[:] = value self.packet.m_nBodySize = size
def hash_swf(url, age=30): hash = ffi.new("unsigned char[]", 32) size = ffi.new("unsigned int*") url = bytes(url, "utf8") res = librtmp.RTMP_HashSWF(url, size, hash, age) if res == 0: hash = hexlify(ffi.buffer(hash, 32)[:]) size = size[0] return str(hash, "utf8"), size else: raise RTMPError("Failed to hash SWF")
def read(self, size): """Attempts to read data from the stream. :param size: int, The maximum amount of bytes to read. Raises :exc:`IOError` on error. """ if not self._buf or len(self._buf) != size: self._buf = ffi.new("char[]", size) self._view = ffi.buffer(self._buf, size) res = librtmp.RTMP_Read(self.client.rtmp, self._buf, size) if res < 0: raise IOError("Failed to read data") return self._view[:res]
def read(self, size): """Attempts to read data from the stream. :param size: int, The maximum amount of bytes to read. Raises :exc:`IOError` on error. """ # If enabled tell the server that our buffer can fit the whole # stream, this often increases throughput alot. if self._update_buffer and not self._updated_buffer and self.duration: self.update_buffer((self.duration * 1000) + 5000) self._updated_buffer = True if not self._buf or len(self._buf) != size: self._buf = ffi.new("char[]", size) self._view = ffi.buffer(self._buf, size) res = librtmp.RTMP_Read(self.client.rtmp, self._buf, size) if res < 0: raise IOError("Failed to read data") return self._view[:res]
def _create_buffer(size): pbuf = ffi.new("char[]", size) pend = pbuf + size buf = ffi.buffer(pbuf, size) return pbuf, pend, buf
def value(self): buf = ffi.buffer(self.aval.av_val, self.aval.av_len) return buf[:]
def body(self): """The body of the packet.""" view = ffi.buffer(self.packet.m_body, self.packet.m_nBodySize) return view[:]