Streaming Video Over USB

Hello everyone,

So first I'll give an overview of the project that I am working on. We have a camera system that we wish to control on a Windows 8 tablet. The program on the tablet will need to display the video signal and also be able to issue commands to the camera (currently, just change the brightness of the LEDs).

There is a "black box" in between the camera and the tablet, which is what I am working on. This "black box" is responsible for power management, sending commands from the tablet to the camera, and relaying back the video signal.

Both the commands from the tablet and the video signal to the tablet needs to be done over a USB cable.

Currently I've gotten the power management figured out. I can also send and receive commands from my desktop to an Atemega328P. The USB connects to an FT232 which converts to UART and everything is good, I can issue a command and see the response.

Now, where I am getting confused is how to also implement streaming the video back to the PC. The video signal coming from the camera is analog and in the format of NTSC or PAL (will need to handle both eventually). I do not know much about USB but I have spent some time drowning in USB 2.0 documentation and USB Video Class protocol documentation.

I figure I will need to digitize the analog video signal before transmitting it over USB somehow. However, with constantly streaming to the tablet I am not sure how I would issue commands back to the "black box" without interrupting the video signal.

This could also be a software issue where it can be accomplished with careful management of the packets being sent, I just don't know.

Any insights on would be appreciated and if you would like more information please don't hesitate to ask.

Thanks for reading and I look forward to your responses.


I do not think a mega328 has enough processing power to digitize and stream video. Nor has it usp capabilities. I think you will be better off with a arm based design like the raspberry pi. Maybe a arm based arduino like the due or teensy3 is up for the job but i dont know.

Even if I switch the MCU, which is likely, I am still lost as how to implement the solution.

What if you using a usb video grabber and using a hub or two separate usb cables?

Even if I switch the MCU, which is likely inevitable

Thanks for the replies :)

I wish I could use to separate USB cables. Unfortunately I need to have the USB-UART and the video streaming done on one USB cable.

I just did some quick Googling on the USB video grabbers, too big for this application but it lead me to a MCU from TI that looks like it may work, has inputs for videos, UART, and USB. Will dive into that MCU for a bit, may prove to be useful :)

The TMS320365.

None of the Arduinos will cope with this not even the YUN. But the Yun should be able to deal with a USB web cam. Or you could use a wireless IP cam.

But none of the Arduinos can cope with turning an analog video signal into digital. To do that you need a codec, its not a job for software. But even with a codec the only Arduino that may cope is the Due.


Okay, so lets say I find a codec that converts the analog video signal into a digital one. I could get one that outputs 8-bit YCrCb fairly easily. I guess, now where do I go from here? Would I need to take those 8 bits into a capable MCU that would then serialize it? Does it become a software issue at that point?

Thanks! :)

If your looking for a codec then YCrCb is NOT what your looking for you need something that can output MP3/MP4 but even so none of the Arduinos could code with the data rate.


xortan: I just did some quick Googling on the USB video grabbers, too big for this application

No idea what you might mean by "too big" but I would say that is clearly the way to do it. Use a video "grabber" into which you feed the video stream, and a USB 2.0 hub to merge that with your control stream with the Arduino. The PC runs the respective applications.

Dead simple! Important point - use readily available building blocks!