def test_video_control(packets, channels): data = packets['tcp_video_control'] payload = factory.video.control(request_keyframe=True, start_stream=True) msg = factory.streamer_tcp(sequence_num=2, prev_sequence_num=1, payload_type=enum.VideoPayloadType.Control, payload=payload.container) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=False) msg.header(sequence_num=1, timestamp=188277389, csrc_list=[]) msg.header.ssrc(channel_id=1024) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 3 assert msg.header.streamer.sequence_num == 2 assert msg.header.streamer.prev_sequence_num == 1 assert msg.header.streamer.type == enum.VideoPayloadType.Control assert msg.payload.flags.request_keyframe is True assert msg.payload.flags.start_stream is True assert msg.payload.flags.stop_stream is False assert msg.payload.flags.queue_depth is False assert msg.payload.flags.lost_frames is False assert msg.payload.flags.last_displayed_frame is False assert len(packed) == len(data) assert packed == data
def test_input_client_handshake(packets, channels): data = packets['tcp_input_client_handshake'] ref_ts = datetime.datetime.utcfromtimestamp(1498690645999 / 1000) payload = factory.input.client_handshake(max_touches=10, reference_timestamp=ref_ts) msg = factory.streamer_tcp( sequence_num=1, prev_sequence_num=0, payload_type=enum.InputPayloadType.ClientHandshake, payload=payload) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=False) msg.header.ssrc(channel_id=1028) msg.header(sequence_num=0, timestamp=2376737668, csrc_list=[]) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 3 assert msg.header.streamer.sequence_num == 1 assert msg.header.streamer.prev_sequence_num == 0 assert msg.header.streamer.type == enum.InputPayloadType.ClientHandshake assert msg.payload.max_touches == 10 assert msg.payload.reference_timestamp == ref_ts assert len(packed) == len(data) assert packed == data
def test_input_frame_ack(packets, channels): data = packets['udp_input_frame_ack'] payload = factory.input.frame_ack(acked_frame=672208545) msg = factory.streamer_udp(payload_type=enum.InputPayloadType.FrameAck, payload=payload.container) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=False) msg.header(sequence_num=1, timestamp=360018616, csrc_list=[]) msg.header.ssrc(channel_id=1028, connection_id=56147) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 0 assert msg.header.streamer.type == enum.InputPayloadType.FrameAck assert msg.payload.acked_frame == 672208545 assert len(packed) == len(data) assert packed == data
def send_message(self, msg): data = packer.pack(msg) if not data: raise StreamerProtocolError('No data') self.socket.sendto(data, self.host)
def test_audio_control(packets, channels): data = packets['tcp_audio_control'] payload = factory.audio.control(reinitialize=False, start_stream=True, stop_stream=False) msg = factory.streamer_tcp(sequence_num=2, prev_sequence_num=1, payload_type=enum.AudioPayloadType.Control, payload=payload.container) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=False) msg.header(sequence_num=1, timestamp=3916375209, csrc_list=[]) msg.header.ssrc(channel_id=1025) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 3 assert msg.header.streamer.sequence_num == 2 assert msg.header.streamer.prev_sequence_num == 1 assert msg.header.streamer.type == enum.AudioPayloadType.Control assert msg.payload.flags.reinitialize is False assert msg.payload.flags.start_stream is True assert msg.payload.flags.stop_stream is False assert len(packed) == len(data) assert packed == data
def send_message(self, msg): data = packer.pack(msg) if not data: raise StreamerProtocolError('No data') self.transport.sendto(data)
def _test_repack_all(packets, channels): for f in packets: unpacked = packer.unpack(packets[f]) msg = message.struct(**unpacked) repacked = packer.pack(msg, channels) assert repacked == packets[f], \ '%s was not repacked correctly:\n(repacked)%s\n!=\n(original)%s' \ % (f, hexlify(repacked), hexlify(packets[f]))
def test_control_handshake(packets, channels): data = packets['tcp_control_handshake'] msg = factory.channel.control_handshake(connection_id=40084) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=True) msg.header(sequence_num=0, timestamp=2847619159, csrc_list=[]) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Control assert msg.payload.type == enum.ChannelControlPayloadType.ClientHandshake assert msg.payload.connection_id == 40084 assert len(packed) == len(data) assert packed == data
def test_udp_handshake(packets, channels): data = packets['udp_handshake'] msg = factory.udp_handshake(connection_id=35795, unknown=1) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=True) msg.header(sequence_num=0, timestamp=1063270342, csrc_list=[]) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.UDPHandshake assert msg.header.ssrc.connection_id == 35795 assert msg.payload.unk == 1 assert len(packed) == len(data) assert packed == data
def test_audio_data(packets, channels): data = packets['udp_audio_data'] audio_data = unhexlify( b'211acffffffffffe95b5d320d4382b0d440136952aad9a464d0b8a97dd894d6eb5dd0669f1390b' b'2bb3855d2f1d77f105ae59071876e3a73c724f16706dd590c7f3ffbafb9b1f3bca6b38679d57b7' b'1559da5b5fe7b64ccadca94bace6aa5030559487cc9152df49c8da66326aa4d05920f758e309cc' b'd7475153653a7df16d5ad716a882b904d52db22fb535a8767e2afa37aa683284ea7996e8b44cc1' b'b9c88688493a2f3ccc5a247268abbd6b11b0b28930cd7a55228c0155201bf53fb66257a3a028ec' b'0dd476963376d18877f4eb36152d54c5374f599d388b167412a10bae75a3f2a7218dbaf0a30ea9' b'89224494307cd02025a72629332aa70235e4922a53f2a91752cca7e7145ef4e4926a02c928e18a' b'1a210dcc3342a31db0d1251649a2e8f3b5cf4885b4600daee6e664e2950d12f4c3baff32157ced' b'710b75545fc7db05b512267f22f853b5708dd876eeed9b18c63373f0bc019efed6739004b2103e' b'800f5bed48f8') payload = factory.audio.data(flags=4, frame_id=0, timestamp=3365588462, data=audio_data) msg = factory.streamer_udp(payload_type=enum.AudioPayloadType.Data, payload=payload.container) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=True) msg.header(sequence_num=1, timestamp=118137370, csrc_list=[]) msg.header.ssrc(channel_id=1025, connection_id=35795) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 0 assert msg.header.streamer.type == enum.AudioPayloadType.Data assert msg.payload.flags == 4 assert msg.payload.frame_id == 0 assert msg.payload.timestamp == 3365588462 assert len(msg.payload.data) == 357 assert len(packed) == len(data) assert packed == data
def test_channel_open_with_flags(packets, channels): data = packets['tcp_channel_open_with_flags'] msg = factory.channel.open(flags=b'\x01\x00\x02\x00', channel_id=1027) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=False) msg.header(sequence_num=0, timestamp=0, csrc_list=[]) msg.payload(name=None) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.ChannelControl assert msg.payload.type == enum.ChannelControlPayloadType.ChannelOpen assert msg.payload.flags == b'\x01\x00\x02\x00' assert len(packed) == len(data) assert packed == data
def test_channel_close(packets, channels): data = packets['tcp_channel_close'] msg = factory.channel.close(flags=0, channel_id=1025) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=False) msg.header(sequence_num=0, timestamp=2376737668, csrc_list=[]) msg.payload(name=None) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.ChannelControl assert msg.payload.type == enum.ChannelControlPayloadType.ChannelClose assert msg.payload.flags == 0 assert len(packed) == len(data) assert packed == data
def test_control_msg_with_header(packets, channels): data = packets['tcp_control_msg_with_header'] payload = factory.control.realtime_telemetry(data=[ Container(key=12, value=0), Container(key=7, value=0), Container(key=11, value=1), Container(key=6, value=0), Container(key=1, value=0), Container(key=5, value=52) ]) control_header = factory.control.control_header( prev_seq_dup=0, unk1=1, unk2=1406, opcode=enum.ControlPayloadType.RealtimeTelemetry, payload=payload.container) msg = factory.streamer_tcp(sequence_num=1, prev_sequence_num=0, payload_type=0, payload=control_header) msg.header.flags(csrc_count=0) msg.header.ssrc(channel_id=1027) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 3 assert msg.header.streamer.sequence_num == 1 assert msg.header.streamer.prev_sequence_num == 0 assert msg.header.streamer.type == 0 assert msg.payload.prev_seq_dup == 0 assert msg.payload.unk1 == 1 assert msg.payload.unk2 == 1406 assert msg.payload.opcode == enum.ControlPayloadType.RealtimeTelemetry assert len(packed) == len(data) assert packed == data
def test_video_client_handshake(packets, channels): data = packets['tcp_video_client_handshake'] requested_format = packet.video.fmt(fps=30, width=1280, height=720, codec=0) payload = factory.video.client_handshake( initial_frame_id=3715731054, requested_format=requested_format.container) msg = factory.streamer_tcp( sequence_num=1, prev_sequence_num=0, payload_type=enum.VideoPayloadType.ClientHandshake, payload=payload) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=False) msg.header.ssrc(channel_id=1024) msg.header(sequence_num=0, timestamp=1055413470, csrc_list=[]) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 3 assert msg.header.streamer.sequence_num == 1 assert msg.header.streamer.prev_sequence_num == 0 assert msg.header.streamer.type == enum.VideoPayloadType.ClientHandshake assert msg.payload.initial_frame_id == 3715731054 assert msg.payload.requested_format.fps == 30 assert msg.payload.requested_format.width == 1280 assert msg.payload.requested_format.height == 720 assert msg.payload.requested_format.codec == 0 assert len(packed) == len(data) assert packed == data
def test_audio_server_handshake(packets, channels): data = packets['tcp_audio_server_handshake'] format = packet.audio.fmt(channels=2, sample_rate=48000, codec=1) ref_ts = datetime.datetime.utcfromtimestamp(1495315092424 / 1000) payload = factory.audio.server_handshake(protocol_version=4, reference_timestamp=ref_ts, formats=[format.container]) msg = factory.streamer_tcp( sequence_num=1, prev_sequence_num=0, payload_type=enum.AudioPayloadType.ServerHandshake, payload=payload) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=False) msg.header.ssrc(channel_id=1025) msg.header(sequence_num=0, timestamp=0, csrc_list=[]) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 3 assert msg.header.streamer.sequence_num == 1 assert msg.header.streamer.prev_sequence_num == 0 assert msg.header.streamer.type == enum.AudioPayloadType.ServerHandshake assert msg.payload.protocol_version == 4 assert msg.payload.reference_timestamp == ref_ts assert len(msg.payload.formats) == 1 assert msg.payload.formats[0].channels == 2 assert msg.payload.formats[0].sample_rate == 48000 assert msg.payload.formats[0].codec == 1 assert len(packed) == len(data) assert packed == data
def test_channel_create(packets, channels): data = packets['tcp_channel_create'] msg = factory.channel.create(name=enum.ChannelClass.Video, flags=0, channel_id=1024) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=False) msg.header(sequence_num=0, timestamp=0, csrc_list=[]) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.ChannelControl assert msg.payload.container.type == enum.ChannelControlPayloadType.ChannelCreate assert msg.payload.container.name == enum.ChannelClass.Video assert msg.payload.container.flags == 0 assert len(packed) == len(data) assert packed == data
def test_input_server_handshake(packets, channels): data = packets['tcp_input_server_handshake'] payload = factory.input.server_handshake(protocol_version=3, desktop_width=1280, desktop_height=720, max_touches=0, initial_frame_id=672208545) msg = factory.streamer_tcp( sequence_num=1, prev_sequence_num=0, payload_type=enum.InputPayloadType.ServerHandshake, payload=payload.container) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=False) msg.header.ssrc(channel_id=1028) msg.header(sequence_num=0, timestamp=360018603, csrc_list=[]) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 3 assert msg.header.streamer.sequence_num == 1 assert msg.header.streamer.prev_sequence_num == 0 assert msg.header.streamer.type == enum.InputPayloadType.ServerHandshake assert msg.payload.protocol_version == 3 assert msg.payload.desktop_width == 1280 assert msg.payload.desktop_height == 720 assert msg.payload.max_touches == 0 assert msg.payload.initial_frame_id == 672208545 assert len(packed) == len(data) assert packed == data
def test_audio_client_handshake(packets, channels): data = packets['tcp_audio_client_handshake'] requested_format = packet.audio.fmt(channels=2, sample_rate=48000, codec=1) payload = factory.audio.client_handshake( initial_frame_id=693041842, requested_format=requested_format.container) msg = factory.streamer_tcp( sequence_num=1, prev_sequence_num=0, payload_type=enum.AudioPayloadType.ClientHandshake, payload=payload) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=False) msg.header.ssrc(channel_id=1025) msg.header(sequence_num=0, timestamp=1055413470, csrc_list=[]) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 3 assert msg.header.streamer.sequence_num == 1 assert msg.header.streamer.prev_sequence_num == 0 assert msg.header.streamer.type == enum.AudioPayloadType.ClientHandshake assert msg.payload.initial_frame_id == 693041842 assert msg.payload.requested_format.channels == 2 assert msg.payload.requested_format.sample_rate == 48000 assert msg.payload.requested_format.codec == 1 assert len(packed) == len(data) assert packed == data
def test_video_server_handshake(packets, channels): data = packets['tcp_video_server_handshake'] ref_ts = datetime.datetime.utcfromtimestamp(1495315092425 / 1000) formats = [ packet.video.fmt(fps=30, width=1280, height=720, codec=0).container, packet.video.fmt(fps=30, width=960, height=540, codec=0).container, packet.video.fmt(fps=30, width=640, height=360, codec=0).container, packet.video.fmt(fps=30, width=320, height=180, codec=0).container ] payload = factory.video.server_handshake(protocol_version=5, width=1280, height=720, fps=30, reference_timestamp=ref_ts, formats=formats) msg = factory.streamer_tcp( sequence_num=1, prev_sequence_num=0, payload_type=enum.VideoPayloadType.ServerHandshake, payload=payload.container) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=False) msg.header.ssrc(channel_id=1024) msg.header(sequence_num=0, timestamp=0, csrc_list=[]) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 3 assert msg.header.streamer.sequence_num == 1 assert msg.header.streamer.prev_sequence_num == 0 assert msg.header.streamer.type == enum.VideoPayloadType.ServerHandshake assert msg.payload.protocol_version == 5 assert msg.payload.width == 1280 assert msg.payload.height == 720 assert msg.payload.fps == 30 assert msg.payload.reference_timestamp == ref_ts assert len(msg.payload.formats) == 4 assert msg.payload.formats[0].fps == 30 assert msg.payload.formats[0].width == 1280 assert msg.payload.formats[0].height == 720 assert msg.payload.formats[0].codec == 0 assert msg.payload.formats[1].fps == 30 assert msg.payload.formats[1].width == 960 assert msg.payload.formats[1].height == 540 assert msg.payload.formats[1].codec == 0 assert msg.payload.formats[2].fps == 30 assert msg.payload.formats[2].width == 640 assert msg.payload.formats[2].height == 360 assert msg.payload.formats[2].codec == 0 assert msg.payload.formats[3].fps == 30 assert msg.payload.formats[3].width == 320 assert msg.payload.formats[3].height == 180 assert msg.payload.formats[3].codec == 0 assert len(packed) == len(data) assert packed == data
def test_input_frame(packets, channels): data = packets['udp_input_frame'] buttons = packet.input.input_frame_buttons(dpad_up=0, dpad_down=0, dpad_left=0, dpad_right=1, start=0, back=0, left_thumbstick=0, right_thumbstick=0, left_shoulder=0, right_shoulder=0, guide=0, unknown=0, a=0, b=0, x=0, y=0) analog = packet.input.input_frame_analog(left_trigger=0, right_trigger=0, left_thumb_x=1752, left_thumb_y=684, right_thumb_x=1080, right_thumb_y=242, rumble_trigger_l=0, rumble_trigger_r=0, rumble_handle_l=0, rumble_handle_r=0) extension = packet.input.input_frame_extension(byte_6=1, byte_7=0, rumble_trigger_l2=0, rumble_trigger_r2=0, rumble_handle_l2=0, rumble_handle_r2=0, byte_12=0, byte_13=0, byte_14=0) payload = packet.input.frame(frame_id=672208564, timestamp=583706515, created_ts=583706495, buttons=buttons.container, analog=analog.container, extension=extension.container) msg = factory.streamer_udp(payload_type=enum.InputPayloadType.Frame, payload=payload.container) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=True) msg.header(sequence_num=2, timestamp=2376737668, csrc_list=[]) msg.header.ssrc(channel_id=1028, connection_id=56147) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 0 assert msg.header.streamer.type == enum.InputPayloadType.Frame assert msg.payload.frame_id == 672208564 assert msg.payload.timestamp == 583706515 assert msg.payload.created_ts == 583706495 assert msg.payload.buttons.dpad_up == 0 assert msg.payload.buttons.dpad_down == 0 assert msg.payload.buttons.dpad_left == 0 assert msg.payload.buttons.dpad_right == 1 assert msg.payload.buttons.start == 0 assert msg.payload.buttons.back == 0 assert msg.payload.buttons.left_thumbstick == 0 assert msg.payload.buttons.right_thumbstick == 0 assert msg.payload.buttons.left_shoulder == 0 assert msg.payload.buttons.right_shoulder == 0 assert msg.payload.buttons.guide == 0 assert msg.payload.buttons.unknown == 0 assert msg.payload.buttons.a == 0 assert msg.payload.buttons.b == 0 assert msg.payload.buttons.x == 0 assert msg.payload.buttons.y == 0 assert msg.payload.analog.left_trigger == 0 assert msg.payload.analog.right_trigger == 0 assert msg.payload.analog.left_thumb_x == 1752 assert msg.payload.analog.left_thumb_y == 684 assert msg.payload.analog.right_thumb_x == 1080 assert msg.payload.analog.right_thumb_y == 242 assert msg.payload.analog.rumble_trigger_l == 0 assert msg.payload.analog.rumble_trigger_r == 0 assert msg.payload.analog.rumble_handle_l == 0 assert msg.payload.analog.rumble_handle_r == 0 assert msg.payload.extension.byte_6 == 1 assert msg.payload.extension.byte_7 == 0 assert msg.payload.extension.rumble_trigger_l2 == 0 assert msg.payload.extension.rumble_trigger_r2 == 0 assert msg.payload.extension.rumble_handle_l2 == 0 assert msg.payload.extension.rumble_handle_r2 == 0 assert msg.payload.extension.byte_12 == 0 assert msg.payload.extension.byte_13 == 0 assert msg.payload.extension.byte_14 == 0 assert len(packed) == len(data) assert packed == data
def test_video_data(packets, channels): data = packets['udp_video_data'] video_data = unhexlify( b'00000001419aaec42f7fc4a01aedf7b54a29887e0a42aa07a6bc7c52e93dc52a2b6c0bbc51499f' b'ff4b0d94eb5cc6fb60753ece94b6dda09d0f87f870c7f443e4c44cd1c8e0a0f199930cfb092483' b'8143c782bfc85a429009aca280b0918df400898005ea2e87474461632cb9c40ec68e91f08aa643' b'2d6801f51539bd85fa2b58cef47237c90a6ab1a594481a036ba7e4823c59d244d47387033e97f6' b'8c0cd6d92d7053bc24b23aa6c8e681828332fe14f33630135b7084cd0c66761969686ae68c3267' b'b2cc0a04648e250d57bc72f4eed83754a66746d63fe5039c0dbcf6d91e9c2e9c06b12b347d8ef2' b'b548a3a71894ccbce971ffb97fd603295afb77619a2edf0c8dbca6bf34d0ba576260965a6b1c71' b'c2e78b9ffffbfe2a3e4f074bd7dee2673239ae4f2dda79a8b0fbf50155826a53eada60d22b45af' b'a5309acd3fcc2e0c9da11a0c22784cb7eaeff9305b953e66e3dd1ba6353d27457971bad05caa2d' b'eaa9b7ade9af8a1447edd78929c298978a884053c049d1889938250a2a1971cb5983fcce03c2ec' b'f5771d467d5ce17008138d3098724c91642bfb0c5c1dfc2e6ec0f7e4e4a82683997b8b7ef9ce7c' b'612af61368b1378a0eadf9427cea0c508d1c59290827051f7101900fc58d3d5e1c77092186e709' b'e4725ff6568127f4ba79d819d8887d7cebe23902db27db505212d2e1cd36234132aa3a761355d8' b'64345eba9bba6c50481f52e26f035e4561e7222cb7088ed7b443d9b6086ca5cabe17d49d03d3ef' b'2aac9111af79d31ba9fae05fa95edf4290824eee803c5e8d40a7e7ce4fa21d0388705fc7cc1c5a' b'42c827f8775fef6d7b50a6fe72e04d51f0d52bbc838a1ac4bedd2eaeef994dbc06f39db5f7644b' b'f6e69a75fd25be1bf696f9d34b5b107fad2dffed8b71f3aa4560959c1de9e0bb235b58f51dafe8' b'ff922b8cd35d763c338f40f88ad10cec7305b107ba19404f9cba053efa2cef72cb91e44e845b3c' b'ffdf13e4102e4a2900bba4ca367f0ac08de2aa2232ee5f59e3bbde466d434d6e12e9069667f829' b'0a5ac2f042614db651ecca2f4ed1e73deeccc8e83e8c9cda998b3da6175a81cf7c4229c75686a8' b'fcc185d591af5e61259771fd7d9c7664ce9bdfd864dc1502501ff011decbdfec0eccf03f388966' b'49597c070a923aeaece7a1e17ec659cc0390f96b59cd5373ae655c30897c9ddbab43485a26dcf6' b'ec0d07439da73ce26d9cf89b40f5b7ca221407037f995c43eab38565cc9037643ad1ccd6dc4f6e' b'5fb47caa2fc378ff43fc0f668527e2316f6419fde0f7e3320a6afcf7946e14c43695b28f6dc26d' b'34b268d13c58d6a9d52f9b6e08551b194b0f76e823fa1d7ce8af88146901646db6c7731ed43edd' b'771c077360f5f6114ca12216c2b498c6b71c277b64f27a703f2d51c1401ea5a8deefef1d00f169' b'c7b42e93fdf0c430f87b9115ff7e2f0fd3c9aeb62095a0a6d4e37c1eae886432a94a8bab2015f6' b'f72a902f392a365108d0d1351eec0e659fe78336b689456f65e53dab09ba8a32a2649b36066331' b'8d1b90253cefcda67669806f286ea2c9a9468791e1a39c8547ca98') payload = factory.video.data(flags=4, frame_id=3715731054, timestamp=3365613642, total_size=5594, packet_count=5, offset=0, data=video_data) msg = factory.streamer_udp(payload_type=enum.VideoPayloadType.Data, payload=payload.container) msg.header.flags(csrc_count=0, version=2, extension=False, marker=False, padding=True) msg.header(sequence_num=1, timestamp=0, csrc_list=[]) msg.header.ssrc(channel_id=1024, connection_id=35795) packed = packer.pack(msg, channels) assert msg.header.flags.payload_type == enum.RtpPayloadType.Streamer assert msg.header.streamer.streamer_version == 0 assert msg.header.streamer.type == enum.VideoPayloadType.Data assert msg.payload.flags == 4 assert msg.payload.frame_id == 3715731054 assert msg.payload.timestamp == 3365613642 assert msg.payload.total_size == 5594 assert msg.payload.packet_count == 5 assert msg.payload.offset == 0 assert len(msg.payload.data) == 1119 assert len(packed) == len(data) assert packed == data