lib.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from threading import Lock
  2. __all__ = ["b2ToInt", "b4ToInt", "RtpData", "VideoManager", "Decoder"]
  3. def b4ToInt(buffer: "bytes") -> "int":
  4. return (buffer[0] << 24) + (buffer[1] << 16) + (buffer[2] << 8) + buffer[3]
  5. def b2ToInt(buffer: "bytes") -> "int":
  6. return (buffer[0] << 8) + buffer[1]
  7. class RtpData:
  8. def __init__(self, *, data=b"", packType=0, naluType=0, pts=0, seq=0, isFrameEnd=False):
  9. # packType: 0(first), 1(center), 2(last), naluType: SPS, PPS, SEI...
  10. self.data, self.packType, self.naluType = data, packType, naluType
  11. self.pts, self.seq, self.isFrameEnd = pts, seq, isFrameEnd
  12. def __str__(self):
  13. return f"<RtpData: packType:{self.packType}, naluType:{self.naluType}, data len:{len(self.data)}>"
  14. class VideoManager:
  15. def __init__(self):
  16. self.packs: "list[RtpData]" = []
  17. self.lock: "Lock" = Lock()
  18. self.rtpCv = None
  19. class Decoder:
  20. """
  21. Reference:https://datatracker.ietf.org/doc/html/rfc7798
  22. """
  23. def __init__(self):
  24. self.Prefix = b"\x00\x00\x00\x01"
  25. self.Manager: "VideoManager" = VideoManager()
  26. def parse(self, rtp):
  27. raise NotImplementedError("parse must be implemented before use")