Beruflich Dokumente
Kultur Dokumente
Need a cost effective way to stream high quality video from experimental UAV's (Unmanned Aerial Vehicles) What if the UAV travels out of eye sight? Immediate feedback on performance of UAV Computer vision systems are processor intensive; need video transmission to offboard computer
Carried out by University of Florida Investigated the use of UAV's instead of CCTV Found it cheaper to use UAV's on microwave tower infrastructure (TV, Radio, etc) Regulations dictate licensing and bandwidth
Model relied on high data throughputs Because of this, raw video lacks quality of compressed video
The Task
Real-time video streaming from portable device Rate control algorithm to adhere to <200ms of lag Optimise stream to keep high frame-rate Control quality of video to acceptable levels
200ms
The Platform
Needs to be portable, low power Needs to be able to encode video in real time High processing speed... Low power?! D: Will need an ARM based platform with Digital Signal Processors (Hardware Acceleration) PandaBoard vs BeagleBoard-xM
BeagleBoard-xM
802.11 b/g/n
Pandaboard (<5W Power) BeagleBoard (~2W Power) If optimisations don't kick in, need extra processing power!
Since platforms are both ARM based, need ARM based Operating System Linux vs Android (Essentially, C/C++ vs Java) Linux wins for PandaBoard development Choice of compiler Pre-built libraries (x264, ioctl, libv4l2, etc) Therefore use Ubuntu, as headless images are provided (and supported by Texas Instruments)
Capture
Need library to interface with camera Video4Linux2 (V4L2) built into Linux Kernel libV4L2 as an abstraction layer to V4L2 Enables us to use essentially any camera Open source!
Camera Linux Kernel Logitech Video4Linux2 Camera Driver libV4L2 Program/Encoder
The Encoder
Need an encoder with adequate compression Has to be open source or have libraries, so we can freely modify the code Google's VP8 and H.264 (x264), both open source VP8 has no hardware acceleration on the Pandaboard, where as H.264 does Therefore, the x264 open source implementation of H.264 is most appropriate encoder
Intra-Frames: Minimal compression, Quality Predictive-Frames: Medium compression Bi-directional-Frames: Maximum compression
Transmission
Need library to interface with encoder and packet into a standardised protocol RTCP (Real-time Transport Control Protocol) ideal for conference calls and in this case, transmission of portable video RTCP gives feedback on transmission stats Need these stats to determine dropped frames (need to know when intra-frame dropped), and to have feedback control
Transmission continued...
RTCP standardised within many media players (VLC, MPlayer, etc) Live555 establishes RTCP connections while interfacing on the back end of an encoder
Camera Screen Client
RTCP Compliant Player
libV4L2
Control Algorithm
Current Progress
First Step
Capturing images from Camera (V4L2) Setting images up into a Buffer (mmap) Save images (for experimentations sake) Demonstration Writing x264 calls to pull buffered images Encode buffered images into video frames Save encoded stream (experimentation) Demonstration
Future Progress
Write H.264 interface for Live555, so Live555 understands how to packet H.264 stream Connect encoded stream to Live555 Experiment with wireless connection to VLC Write control algorithm that reads data from RTCP statistics and controls encode rates (kb/s, frame-rate, resolution, etc) Optimise program and control
Fourth Step
Future Potential
Bunny hopping data over wireless routers Pan and Zoom functionality (for camera) Control of UAV remotely Open the video stream for computer vision projects
Questions?
http://code.launchpad.net/~alex-stevens/+junk/spyPanda