<div dir="ltr">I've made progress, and now have a streaming server with Twisted Python networking that downloads over 1000000 numbers.   I wanted a streaming client though...  Kafka or Faust or asyncio in python may be options, but I'm worn out from dealing with streaming clients using sockets in python.<div><br></div><div>John</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Aug 14, 2023 at 5:22 PM John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">I'd like to hear more about SWML as I am creating a new streaming format (which is currently unnamed, but a previous version had the extension .rg for route graph, before that I was using serialized Java) for recording and processing Humanoid information from MediaPipe. I'm having trouble with networking using Python, so I haven't done much streaming yet, apparently default sockets on python require many connections, so I might not be able to do streaming unless I find a better socket library. I've tried turning off my firewall, added exclusions to antivirus, and used a virtual environment that was excluded from antivirus.  I get like a page or two of data in the terminal on the server log, and I get: "ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine."  I'm on Windows 10.</div><div dir="ltr"><br></div><div dir="ltr">My format approach is to do something like BVH (Biovision Hierarchy), but a graph instead of a hierarchy (with From/To links for bones between two joints), but I think I will be able to remove things from the "skeleton graph," which is an important feature of my streaming format.   I'm streaming with python that generates data from Google MediaPipe's Holistic.  I haven't moved on from this to the MediaPipe's new tasks structure, but I might if I can get x,y,z coordinates, even if I can't see the skeleton on the video.  At least I'll have video (with opencv).  But I'm moving away from Python, probably to JavaScript.  I don't see Java being taken seriously by MediaPipe. Android/Kotlin, yes--I guess I could learn Kotlin.<div><br></div><div>I would like to prove a client/server approach so I can separate the skeleton geometry stream generation from the rest of the system.  I realize that saving the stream to a file is an important first step, but if I can't get networking working on my local system, I might use bash piping to go from one tool to the next, or save to a file (yuck!). Using a pipe is more private, but fewer features than networking.</div><div><br></div><div>Here's a Python program loop that has multiple connections (couldn't do one), that actually *doesn't* work, Apparently, one's data needs to be extremely short. It varies between the last string being "CHICKEN," "CROW," and "EOF."  I guess it's time to do the stackoverflow thing, if not Copilot.</div><div><br></div><div><div>import socket</div><div><br></div><div><br></div><div>sock = None</div><div><br></div><div>def msgSend(sock, data):</div><div>    if data:</div><div>        sock.send((data).encode())</div><div><br></div><div>def socketCreate():</div><div>    HOST, PORT = "localhost", 3000</div><div>    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM);</div><div>    sock.connect((HOST, PORT))</div><div>    return sock</div><div><br></div><div><br></div><div># Create a socket (SOCK_STREAM means a TCP socket)</div><div>if __name__ == '__main__':</div><div>    for i in range(1,2001):</div><div>        print(f"Connection {i}:");</div><div>        sock = socketCreate()</div><div>        msgSend(sock, "DUCK\n")</div><div>        msgSend(sock, "GOOSE\n")</div><div>        msgSend(sock, "RAVEN\n")</div><div>        msgSend(sock, "EAGLE\n")</div><div>        msgSend(sock, "CHICKEN\n")</div><div>        msgSend(sock, "CROW\n")</div><div>        sock.sendall("EOF\n".encode())</div><div>        sock.shutdown(socket.SHUT_RDWR)</div><div>        sock.close()</div></div></div></div>
</div></div>
</blockquote></div>