Я использую RTMP https://github.com/theintencity/rtmplite в качестве сервера прямой трансляции. Я хочу получить кадр за кадром из потоковых данных. На самом деле на сервере была функция сохранения потока в файл .flv (входные данные - данные байтового потока) в функции write
из строки 673
в 686
, что я хочу, также ввод данных потокового байта но вывод покадровый, так что я могу обрабатывать каждый кадр.
Ниже приведена функция, над которой я работаю
def write(self, message):
'''Write a message to the file, assuming it was opened for writing or appending.'''
# if message.type == Message.VIDEO:
# self.videostarted = True
# elif not hasattr(self, "videostarted"): return
if message.type == Message.AUDIO or message.type == Message.VIDEO:
length, ts = message.size, message.time
#if _debug: print 'FLV.write()', message.type, ts
if self.tsr0 is None: self.tsr0 = ts - self.tsr1
self.tsr, ts = ts, ts - self.tsr0
# if message.type == Message.AUDIO: print 'w', message.type, ts
data = struct.pack('>BBHBHB', message.type, (length >> 16) & 0xff, length & 0x0ffff, (ts >> 16) & 0xff, ts & 0x0ffff, (ts >> 24) & 0xff) + '\x00\x00\x00' + message.data
data += struct.pack('>I', len(data))
self.fp.write(data)
Вывод message.data
(усеченный) выглядит следующим образом
data="2\x00\x00\x84\x0fC?\xff\x9c\x1d\xfc&An\xf9\xc2\x18\xfc4\xbe\xf0\x8a\n\xa7\xd5\x03\x00\xe2\x0c\x03\x18\x94\x08\x01\x0f\xe2@\x1e\x1f\xfe\xfb;$\x93\xb3fo\xfa\x94\xf3\xec\nxZ\xc3k\x08\xfc\xcd\x04{g\xfa\xc4AA\xa4~\xeeo\x1b0#\xecR\x98\x0b_\x080\xac\x9a\xf5pi@\xa4\xae\x87\xce'\xab\xf5c65\xcd...(704)
Я не знаю, как получить фрейм этого потока, означает, что фрейм должен начинаться с какого байта, до какого байта и как мы можем его узнать.
Я очень признателен, если кто-нибудь даст мне несколько советов или подсказок. Спасибо