You've set up a listening TCP socket, which requires a client to connect before data can flow. But even if you set up a UDP socket instead you'd likely end up having the client connect midstream without any of the metadata that defines how the stream should be interpreted.
If you have a protocol that provides metadata on a frequent and regular basis you could try a UDP socket. My version of
nc doesn't have the
-k option but I'm aware there are (at least) two different versions available, so I can't give you a tested command-line example.
If you want to stream video you should use a purpose built piece of software. It's a complex technology area (a complex legal area, too, as there are many patents) and unless you're streaming something simple such as MJPEG you're unlikely to have any success whatsoever with a naïve solution such as
Some examples of software applications can be found from the likes of Videolan, Icecast, Opencast, or Red5.
Actually, reading some documentation for
raspivid it seems that you could use a listener such as that offered by
systemd to handle the incoming connection, and then start
raspivid once the TCP connection is established. You still don't get any flow control or real-time bandwidth management, but in a controlled network you might achieve your aim satisfactorily.