A lot has happened since I posted my ugly hacks required to take advantage of the H.264 compressor in the Logitech C920 webcam. Gstreamer 1.2 now includes a uvch264src that can be used to read H.264 encoded video stream from the camera eliminating the need for an external capture application.
You may already know about my existing enthusiasm for Logitech webcams, which is due to the combination of relatively good image quality, high resolution and easy to use UVC interface. I was therefore very happy to learn about their newest camera, the HD Pro Webcam C920, which in addition to the standard HD webcam stuff we already know from the C910, also provides hardware encoded H.264 video stream! This is rather new and there isn’t much software that can take advantage of it; however, with a little tweaking and hacking we can get the H.264 stream into Gstreamer, where after we can do pretty much whatever we want.
Back in August 2010 I ran a brief experiment using GstInputSelector to switch between various video sources. You may have noticed that it was using Theora encoder while most of my other DVB experiments used H.264 encoder in MPEG-TS container. The reason for this was that I could not make x264enc work in the pipeline used for the video switcher.
With only two weeks left until the flight opportunity it was time to make status and try to assess how much I can finish until the launch.
It has been a busy night but I have made good progress with the Gumtix Overo Fire. Today’s report is action packed with kernel panics, painful downgrades and a working webcam.
Yesterday I have been testing the DVB setup using Theora encoded video in Ogg container instead of the H.264/MPEG-TS I have been using so far. Initial tests looked promising, but at the end the link was rather choppy and broken.
On this first screen shot I am running the simulator (i.e. no USRP) with a test pattern as video source. This setup was very stable and I was surprised to see that mplayer got synced much faster than when using H.264/MPEG-TS.
The second screen shot shows the setup running with the GMSK transceiver and again using a video test pattern as source. I have let it run for over 2 hours during which it was very stable. Of course, I was playing with the RF settings while it was running to make it loose the signal and force it to resync – no problems there.
Finally, I replaced the video test pattern with the Logitech Webcam Pro 9000 as video source and this is when things have started to become bad. The video came up all right but already after a few minutes, the playback becomes choppy and mplayer starts spitting “Ogg: bad packet in stream 0” messages out in the console. At the same time, the frame rate drops to about 1 fps. So this is not very useful.
For now, I will stick to H.264/MPEG-TS.
Up until now I have been using the standard (link) YUV 4:2:2 pixel format with my Logitech Webcam Pro 9000. This format is good for most cases; however, the framerate is limited to 15/2 fps at 1280×720 resolution, while the other supported formats (MJPG, RGB3, BGR3, YU12, YV12) support this reolution with up to 30 fps! So it was time for me to figure it out. Continue reading “Webcam pixel formats and Gstreamer caps filters”
An email on the gst-devel mailing list last week pointed me to a rather interesting example in the gst-python repository: switch.py – shows how to use the GstInputSelector element in a Python script to select between different input streams. When I looked at the example I thought right away that it would be cool to use it to switch between different cameras in my simple DVB setup that uses Gstreamer and GNU Radio.
Recording audio with gstreamer is easy:
gst-launch -e pulsesrc ! audioconvert ! \
lamemp3enc target=1 bitrate=64 cbr=true ! \
The pulsesrc element here refers to the pulseaudio input (pulseaudio is AFAIK the default sound system in all linux distributions nowadays). This is good and will capture audio from the default sound input, which can be microphone or line-in depending on the hardware and the pulseaudio configuration.
But what if I plug in my USB webcam with built-in microphone and I want to capture audio from that?
This weekend I have been playing with a full duplex transceiver version of the simple DVB setup that allows to use only one computer and one USRP as a transmitter and receiver. By using separate daughterboards I can use one side to transmit and the other side to receive. Using two sets and two frequencies the transceiver can be used for two-way video conferencing over the air 🙂