1. User Case:
- Demo Architecture:
- Demo Description:
- A, B, C and Speaker all are i.MX6DQ SabreSD board and running Ubuntu system.
- A is media server which send out broadcast 30Mbps h264 video and audio stream and running iperf to send out tcp packets via best efforts lane to PC.
- B and C are clients to get video data only and play in screen.
- Speaker is a client to receive audio data only and play to speaker.
- PC which install ubuntu system is used to received best efforts data from A.
- Demo Goal:
Use Gstreamer playback 30Mbps streaming "H264_AVC_1080p_30fps_27Mbps_mp3.avi", while running iperf TCP streaming under the following two case:
1. Running the non-CBS kernel
2. Enable the FIQ kernel
Validate the Qav (Queue and Forwarding Protocol) which is developed by SW.
CBS &Shaper Patch:
Gstreamer UDPAVB Plug-in Library and Source:
3. Setup the Patch:
- Low level: kernel enet driver implement CBS and traffic shaper:
1. Apply all the patches in the patch_whole.tar.gz in the attachment
2. Rebuild kernel 3.0.35:
Enable "CONFIG_ENET_IMX6_AVB" to support AVB.
Enable "CONFIG_RUN_IN_FIQ" in kernel: let CBS run in FIQ mode.
3. make uImage.
You can also use the uImage-avb-fig in the attachment directly. Flash to the SD card use dd command, the user gudie refer to the i.MX_6Dual6Quad SABRE_SD_Linux_User_Guide.pdf.
Note: the uImage_org_nonavb in the attachment is the kernel image without QAV and FIQ.
- High level: use Gstreamer as the media input/output interface, encapsulation with IEEE1722 format:
Before the below action, you should already have seutp the Ubuntu Rootfs, copied all the Freescale *.deb files that come alone with the Release BSP demo image package and copied all the MM codec *.deb files (IMX_MMCODEC_3.0.7.tar) that from Freescale offical website, the user gudie refer to the i.MX_6Dual6Quad SABRE_SD_Linux_User_Guide.pdf.
1. Add gstreamer setup version as following:
- gstreamer core version: 0.10.35
- gst-plugins-good version: 0.10.30
- gst-plugins-bad version: 0.10.11
- tar xvzf udp.tar.gz
- cd gst-plugins-good-0.10.30
- make install
- cp ~/udp/* gst/udp/
- cd gst/udp
- cp libgstudp.so /usr/lib/gstreamer-0.10/
- gst-inspect | grep avb //Check whether the avb plugin is installed successfully. If the three avb plugin is printed out in the terminal, the avb plugins are proved to install properly.
4. Run the Demo:
1. Start the iperf server in PC linux machine by inputting " iperf -s -i 1&".
2. Power on the A board, ensure the board can get the DHCP IP address, Start the iperf client on the demo board which sends outgoing Audio-Video streaming in the background. Input "iperf -c <iperf server ip> - t 6000&". If the connection is successful, the iperf log should be able to be seen in the linux machine terminal.
3. Power on the B and C board, inputting the following command to receive video data:
Run "./startRxVideoAVB.sh" to start gstreamer video receive process on video display board
4. Power on the speaker board, inputting the following command to receive audio data:
Run "./startRxAudioAVB.sh" to start gstream audio receive process on audio playback board
5. Inputting the following command to send video/audio data to client at the A board terminal windowns:
Run "./startTxAVB.sh" to start the 1722 streaming traffic
(note: H264_AVC_1080p_30fps_27Mbps_mp3.avi located at current directory)
6. Change to the kernel with QAV and follow the steps 1~5 above
Without FIQ Qav, video play at client B and C serious freeze. It takes 3 minutes to play 1min 40s h264 stream. iperf speed over 80Mbps.
With FIQ Qav, video play at client B and C is smooth and same as without iperf in background. Iperf show speed is less than 70Mbps. FIQ Qav correctly reserve necessary bandwidth to AV stream
6. Know issues
Failed to request the IP from DHCP