如何使用rtmp服务器从实时流中逐帧提取

时间:2018-05-04 09:24:38

标签: rtmp live-streaming

我使用rtmp https://github.com/theintencity/rtmplite作为直播服务器。我想从流数据中逐帧获取。实际上在服务器中有功能将流保存到函数write中的 .flv 文件(输入是字节流数据)从行673686我想要的也输入是字节流数据,但输出是逐帧的,这样我就可以在每一帧上进行处理。

以下是我正在处理的功能

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 :(得分:0)