File size: 2,324 Bytes
44bafb2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# All credits to https://github.com/LuanRT/googlevideo
from pytubefix.sabr.proto import BinaryWriter, BinaryReader
from pytubefix.sabr.video_streaming.playback_cookie import PlaybackCookie
class NextRequestPolicy:
def __init__(self):
self.targetAudioReadaheadMs = 0
self.targetVideoReadaheadMs = 0
self.backoffTimeMs = 0
self.playbackCookie = None
self.videoId = ""
@staticmethod
def encode(message: dict, writer=None):
if writer is None:
writer = BinaryWriter()
if message.get("targetAudioReadaheadMs", 0) != 0:
writer.uint32(8).int32(message["targetAudioReadaheadMs"])
if message.get("targetVideoReadaheadMs", 0) != 0:
writer.uint32(16).int32(message["targetVideoReadaheadMs"])
if message.get("backoffTimeMs", 0) != 0:
writer.uint32(32).int32(message["backoffTimeMs"])
if message.get("playbackCookie") is not None:
PlaybackCookie.encode(message["playbackCookie"], writer.uint32(58).fork()).join()
if message.get("videoId", "") != "":
writer.uint32(66).string(message["videoId"])
return writer
@staticmethod
def decode(data, length=None):
reader = data if isinstance(data, BinaryReader) else BinaryReader(data)
end = reader.len if length is None else reader.pos + length
message = NextRequestPolicy
while reader.pos < end:
tag = reader.uint32()
field = tag >> 3
if field == 1 and tag == 8:
message.targetAudioReadaheadMs = reader.int32()
continue
elif field == 2 and tag == 16:
message.targetVideoReadaheadMs = reader.int32()
continue
elif field == 4 and tag == 32:
message.backoffTimeMs = reader.int32()
continue
elif field == 7 and tag == 58:
message.playbackCookie = PlaybackCookie.decode(reader, reader.uint32())
continue
elif field == 8 and tag == 66:
message.videoId = reader.string()
continue
elif (tag & 7) == 4 or tag == 0:
break
else:
reader.skip(tag & 7)
return message
|