Как извлечь кадр за кадром из живого потока с сервера RTMP - PullRequest
0 голосов
/ 04 мая 2018

Я использую 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)

Я не знаю, как получить фрейм этого потока, означает, что фрейм должен начинаться с какого байта, до какого байта и как мы можем его узнать.

Я очень признателен, если кто-нибудь даст мне несколько советов или подсказок. Спасибо

1 Ответ

0 голосов
/ 04 мая 2018
...