240 likes | 440 Views
IPTV. By Miguel Amador, Grae Cullen, Kevin Nadeau, Phillip Napieralski , and Steven Steffen. Primary Objectives. Develop a tool that facilitates switching bitstreams in real-time given a switching time table Research and develop algorithms that facilitate switching resolutions
E N D
IPTV By Miguel Amador, Grae Cullen, Kevin Nadeau, Phillip Napieralski, and Steven Steffen
Primary Objectives • Develop a tool that facilitates switching bitstreams in real-time given a switching time table • Research and develop algorithms that facilitate switching resolutions • Implement a GUI for IPTV and then use that GUI to facilitate running PiP and multichannel preview.
Outline – Stream Switching • NAL Unit Streams • SPS/PPS Data • Stream Switching • Static Stream Switches • Dynamic Stream Switches • Decoding the Switch (FFMPEG) • Allocation Issue • Types of Switches • Decoding the Switch (VLC) • Progress • Issues
NAL Unit Streams • SPS – Sequence Parameter Set • PPS – Picture Parameter Set • NAL units rely on the previous SPS/PPS for decoding
Stream Switching • NAL Unit Stream (H.264 files.) • Static Switching • Appending H.264 files • Dynamic Switching • RTSP request
Decoding the Switch (FFMPEG) • Allocating SPS/PPS structure • I-Frame switching • No drift • P frame switching • Drift • I-Frame Switching • Resolution switching • Drift • Resolution Switching
Decoding the Switch (VLC) • Compiling • -with-ffmpeg-tree=/our_dir/our_ffmpeg_dir/ • Video Buffer?
How to use git • git commands: • git clone git://git.videolan.org/vlc.git • git commit –a or git add ./filepath/filename then commit • All changes need to be “commited,” this will make sure it is never overwritten • To commit all the files that you changed automatically, use the former • git format-patch -o patches origin • Patching VLC’s source • Copy the patch to your vlc/ directory • Patch –p1 <REU2008_btrsw_mod.patch • If patch doesn’t work Extract the .zip to VLC directory
Compiling VLC • Problems with Fedora • Firewall issues • Yum repositories periodically down • Head VLC developer used Ubuntu 8.04… • Tip: Use Ubuntu • Powerful apt-get tool makes resolving VLC’s dependencies easier and less time-consuming • apt-get install vlc-devel • apt-get build-depvlc • After that… • ./bootstrap • ./configure –-enable-live555 ( --enable-debug ) • make && sudo make install
How the modification works SET_PARAMETER rtsp://<ip:port>/fol RTSP/1.0 track: <num> Server module forwards request to the MP4 demuxer, which then switches tracks
Further Considerations • Resolution switching • Make the video track list dynamic • Get server to send an RTSP message with # of tracks • Client side: add a var_Change( … ) to the “video-es” variable in VLC for each track there is • Cross-compile VLC mod so that it works under Windows, Mac, etc… (already supported) • Create a standard for the multitrack MP4 files with different bitrates/resolutions
Creating a multitrack mp4 file • handbrake • Useful to rip DVDs at various qualities with H264 • Make sure to include bframes=1 in x264 options tab • mpeg4ip tools • mp4creator • mp4creator –create=“track1.264” output.mp4 • mp4creator –create=“track2.264” output.mp4, etc… • mp4info
Creating a VoD server • ./vlc –-rtsp-host 0.0.0.0:1234 –I telnet • telnet 127.0.0.1 4212 <default pw: admin> • Load <config name>.vlm or input manually • new video1 vod enabled • setup video1 input “<filepath>/<filename>.<ext>“ • setup video1 mux mp2t sets encapsulation method • For a client to connect: • ./vlc rtsp://<server_ip>:<server_port>/video1
Interpolation with Linear Algorithm Original image Interpolated with Nearest Neighbor Algorithm Interpolation with Our Catmull-Rom Algorithm
RGB Values from the original picture and interpolated images
The Problem • Looked into VLC’s two built in implementation of PiP and Multi-channel preview, called “Mosaic”. • VLC’s two implementations are the main command line interface, and the mosaic wizard in the web interface. • After some working with VLC’s methods, I discovered that both methods they use are undependable and static, meaning that once the video is started, it cant be changed without completely reseting.
VLC Command Line Interface The picture illustrates the main VLC interface accompanied by the necessary command line execution to implement VLC’s built in Mosaic. This is a very clumsy way of achieving the desired results, and it also has a large learning curve. Also, this method does not allow for manipulation of the videos individually within the program. The only way to change the file playing on a certain video picture, the entire command must be reset from the beginning
Mosaic Wizard The mosaic wizard is the only method besides a long stream of command line text to get PiP, and even then, it has a few flaws. One thing is, the pictures can only be blocked in an edge to edge square, they cant be spread out, or even just diagonal to each other. Therefore, one cant get for instance, one picture in each corner of the larger one, because they aren’t directly adjacent to one another. This method, again, does not allow for in-play manipulation.
The First Attempt The C++ Approach When using the C++ approach, we were attempting to make an interface that would at the click of a button implement the VLC command line Mosaic, thereby diminishing the learning curve. The problem was that each time this was attempted, a new instance of VLC was started. This would cause there to be an unlimited number of VLC’s open at once, and this was extremely undesirable. It was also still static, so we still couldn’t change files during playback. • Since both of these methods are slow and undependable. A new method was necessary. • We tried several methods of attempting to accomplish this, including writing a C++ program to implement the regular mosaic functions
The Final Solution The VLC PiP Interface • The final solution came with the discovery of the VLC C# support, that allowed a person to make a VC# application that can embed VLC into it. This allowed us to achieve both of our goals, an easily useable PiP interface, as well as dynamic support to change files, including support for flipping between two running pictures.
Acknowledgements • Dr. WenjunZeng • Lina Dong • Wei Liu • Yingan Zhu