Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The RDKC Media Server is much more than a multi-format, multi-protocol server that delivers your media rich content across multiple screens and platforms. The RDK camera software runs on RPi-0/RPI-3 device. With this RTSP streaming we can able to play live streaming content in VLC player. This page dedicated to bringing up and validation of RMS functionality with RTSP streaming in RPI-0/RPI-3. 

...

Build

...

and Flash Procedure

Refer below link to build camera image

Morty:

RDK-C Build Instruction for RPI-0

RDK-C Build Instruction for RPI-3 with Dunfell branch

Image Flash Procedure


Dunfell:

RDK-C rdk-next Yocto 3.1 dunfell build for Raspberrypi

Validation Procedure of RMS with RTSP streaming

STEP 1:

Add require SSID and PSK in /etc/wpa_supplicant.conf file in below format

network={

ssid="username"

psk="password"

}

Code Block
Code Block
languagebash
titleImage Flash step
$ bzcat "Image Name" | sudo dd of="Device Name" bs=4M iflag=fullblock oflag=direct conv=fsync

Example:
bzcat rdk-generic-camera-image_default_20201127105606.rootfs.wic.bz2 | sudo dd of=/dev/sdc bs=4M iflag=fullblock oflag=direct conv=fsync

Validation Procedure of RMS with RTSP streaming

STEP 1:

Add require SSID and PSK in /etc/wpa_supplicant.conf file in below format

network={

ssid="username"

psk="password"

}

Console output
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

network={
ssid="XXXX"
psk="YYYYYYYYY"
}


STEP 2:

Add  below configuration in end of the /boot/config.txt file

dtoverlay=imx219

core_freq_min=250

Code Block
languagebash
titleConsole output
vi /boot/config.txt

dtoverlay=imx219
core_freq_min=250 


STEP 3:

  1. RMS with RTSP validation using v4l2

Disable dtoverlay and minimum freq configuration in config.txt file

Code Block
languagebash
titlev4l2 : Console output
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

network={
ssid="XXXX"
psk="YYYYYYYYY"
}

STEP 2:

Reboot the Target

After Reboot don't do step 1 and 2.

Note : Step 1 & 2 is only applicable for fresh target boot-up with new image.

STEP 3:

Modify needed resolution in rms configuration file

Supported Resolution:

SD:

Width - 640 , Height - 480

Width - 720 , Height - 576

HD:

Width - 1280 , Height - 720

FULL HD  :

...

vi /boot/config.txt

#dtoverlay=imx219
#core_freq_min=250 


Run mediastreamer binary with v4l2src configuration.

Code Block
languagebash
titlev4l2 : Console output
vi /lib/rdk/startMST.sh

#Run mediastreamer binary in background
# 1. To validate streaming with v4l2 need to give "mediastreamer v4l2src &"
# 2. To validate streaming with libcamera need to give "mediastreamer libcamerasrc &"
# If we change 1 and 2, need to reboot the target and validate streaming.

mediastreamer v4l2src &


        2. RMS with RTSP validation using libcamera

Enable dtoverlay and minimum freq configuration in config.txt file

Code Block
languagebash
titlelibcamera : Console output
vi /boot/config.txt

dtoverlay=imx219
core_freq_min=250 


Run mediastreamer binary with libcamerasrc configuration.

Modify resolution in below configuration file

cd /usr/local/rms/bin

vi rms.conf

Code Block
languagebash
titleConsole output
RRSIP=XXX.XXX.XXX.XXX
RRSPORT=81
ROOMID=rpi0
RRSSSL=0
WIDTH=1280
HEIGHT=72

After resolution modification need to reboot the target.

Note: This step is not necessary,it is depends on your resolution validation.

STEP 4:

WiFi connection is must needed for RMS validation.

Check WiFi connection by using below command.

ifconfig

Code Block
languagebash
titlelibcamera : Console output
vi /lib/rdk/startMST.sh

#Run mediastreamer binary in background
# 1. To validate streaming with v4l2 need to give "mediastreamer v4l2src &"
# 2. To validate streaming with libcamera need to give "mediastreamer libcamerasrc &"
# If we change 1 and 2, need to reboot the target and validate streaming.

mediastreamer libcamerasrc &


STEP 4:

Reboot the Target

After Reboot don't do step 1 and 2.

Note : Step 1 & 2 is only applicable for fresh target boot-up with new image.


STEP 5:

Modify needed resolution in rms configuration file

Supported Resolution:

SD:

Width - 640 , Height - 480

Width - 720 , Height - 576

HD:

Width - 1280 , Height - 720

FULL HD  :

Width - 1920 , Height - 1080


Modify resolution in below configuration file

cd /usr/local/rms/bin

vi rms.conf

Code Block
languagebash
titleConsole output
RRSIP=XXX.XXX.XXX.XXX
RRSPORT=81
ROOMID=rpi0
RRSSSL=0
WIDTH=1280
HEIGHT=72

After resolution modification need to reboot the target.

Note: This step is not necessary,it is depends on your resolution validation.


STEP 6:

WiFi connection is must needed for RMS validation.

Check WiFi connection by using below command.

ifconfig

Code Block
languagebash
titleConsole output
root@raspberrypi3-rdk-camera:~# ifconfig
eth0      Link encap:Ethernet  HWaddr B8:27:EB:87:67:91  
 root@raspberrypi3-rdk-camera:~# ifconfig
eth0      Link encap:Ethernet  HWaddr B8:27:EB:87:67:91  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACKBROADCAST RUNNINGMULTICAST  MTU:655361500  Metric:1
          RX packets:898420 errors:0 dropped:0 overruns:0 frame:0
          TX packets:898420 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:256397480 (240.40 MiBB)  TX bytes:256397480 (240.40 MiBB)

wlan0lo        Link encap:EthernetLocal Loopback HWaddr B8:27:EB:D2:32:C4  
          inet addr:192127.1680.430.1461  Bcast:192.168.43.255  Mask:255.2550.2550.0
          UP BROADCASTLOOPBACK RUNNING MULTICAST  MTU:150065536  Metric:1
          RX packets:4489842 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10389842 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:448425639748 (24.4.3 KiBMiB)  TX bytes:1021625639748 (924.94 KiB)

STEP 5:

check loaded module by using below command

lsmod

Code Block
languagebash
titleConsole output
root@raspberrypi3-rdk-camera:~# lsmod
ModuleMiB)

wlan0     Link encap:Ethernet  HWaddr B8:27:EB:D2:32:C4  
       Size  Used by
bcm2835_v4l2     inet addr:192.168.43.146  Bcast:192.168.43.255  Mask:255.255.255.0
      40563  0
v4l2_common  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    4809  1 bcm2835_v4l2
videobuf2_vmalloc   RX packets:44 errors:0  6264  1 bcm2835_v4l2
videobuf2_memopsdropped:0 overruns:0 frame:0
        1528  1 videobuf2_vmalloc
videobuf2_v4l2         12640  1 bcm2835_v4l2
videobuf2_coreTX packets:103 errors:0 dropped:0 overruns:0 carrier:0
         27389  2 bcm2835_v4l2,videobuf2_v4l2
videodevcollisions:0 txqueuelen:1000 
          RX bytes:4484 (4.3 KiB) 154457 TX bytes:10216 (9.9 KiB)


STEP 7:

check loaded module by using below command

lsmod

Code Block
languagebash
titleConsole output
root@raspberrypi3-rdk-camera:~# lsmod
Module4 v4l2_common,videobuf2_core,bcm2835_v4l2,videobuf2_v4l2
media                  23307  1Size videodev
brcmfmac Used by
bcm2835_v4l2           40563 258239  0
brcmutilv4l2_common                75904809  1 brcmfmacbcm2835_v4l2
sndvideobuf2_bcm2835vmalloc       6264  1 bcm2835_v4l2
videobuf2_memops  21405    0
cfg80211  1528  1 videobuf2_vmalloc
videobuf2_v4l2         49283612640  1 brcmfmacbcm2835_v4l2
sndvideobuf2_pcmcore         27389  2 bcm2835_v4l2,videobuf2_v4l2
videodev    79872  1 snd_bcm2835
rfkill       154457  4 v4l2_common,videobuf2_core,bcm2835_v4l2,videobuf2_v4l2
media       19936  3 cfg80211
snd_timer        23307  1 videodev
brcmfmac   20294  1 snd_pcm
snd         258239  0
brcmutil                529497590  3 snd_timer,1 brcmfmac
snd_bcm2835,snd_pcm
lirc_rpi            21405  0
cfg80211       6840  0
lirc_dev     492836  1 brcmfmac
snd_pcm        7533  1 lirc_rpi
uio_pdrv_genirq         3469  0
uio                     8703  1 uio_pdrv_genirq
fixed                   2876  0
sch_fq_codel            9662  2
ipv6                  384101  18

STEP 6:

check camera device there or not by using below command

      79872  1 snd_bcm2835
rfkill                 19936  3 cfg80211
snd_timer              20294  1 snd_pcm
snd                    52949  3 snd_timer,snd_bcm2835,snd_pcm
lirc_rpi                6840  0
lirc_dev                7533  1 lirc_rpi
uio_pdrv_genirq         3469  0
uio                     8703  1 uio_pdrv_genirq
fixed                   2876  0
sch_fq_codel            9662  2
ipv6                  384101  18


STEP 8:

check camera device there or not by using below command

ls /dev/video0

Code Block
languagebash
titleConsole output
root@raspberrypi0-rdk-camera:~# ls /dev/video0 
/dev/video0


STEP 9:

Need to stop below service file to validate gstreamer based live streaming

systemctl stop rms-launcher.service

systemctl stop pipewire-launcher.service

systemctl stop mst-launcher.service


Need to do below changes in config.lua file

vi /usr/local/rms/config/config.lua

Code Block
languagebash
titleConsole output: Config.lua change
-
+	]]--
 				-- RTSP
 				{
-					ip="127.0.0.1",
+					ip="0.0.0.0",
 					port=5544,
 					protocol="inboundRtsp",
 				},
-
+	--[[


After stoping those service file, then we need to start/trigger below service and binaries.

Code Block
languagebash
titleConsole output: Trigger mediastreamer
root@raspberrypi3-rdk-camera:~# systemctl start mst-launcher


To start RMS binary , We need to go cd /usr/local/rms/bin directoryls /dev/video0

Code Block
languagebash
titleConsole output: Trigger RMS
root@raspberrypi0root@raspberrypi3-rdk-camera:~# ls /dev/video0 
/dev/video0

STEP 7:

Check mediastreamer and rms binaries are running or not before RTSP streaming validation.

cd /usr/local/rms/bin/
root@raspberrypi3-rdk-camera:/usr/local/rms/bin# ./rdkcmediaserver ../config/config.lua &


Need to check mediastreamer and RMS running status with below commandps -Af | grep media

Code Block
languagebash
titleConsole output: Check status
root@raspberrypi3-rdk-camera:~# ps -Af | grep media
root      2396  197   1  1 13 1015:5730 ?        00:04:40 mediastreamer
root      1007 00:00:00 mediastreamer v4l2src
root  1   3 10:572555 ? 1613 30 15:31 pts/0    00:00:01:05 ./rdkcmediaserver ../config/config.lua
root      109592574  19431613  0 1115:3231 ttyS0pts/0    00:00:00 grep media

STEP 810:

Enter into the Telnet console with telnet command

...

Code Block
languagebash
titleConsole output
listconfig
Command entered successfully!
Run-time configuration

    dash: []
    hds: []
    hls: []
    metalistener: []
    mss: []
    process: []
    pull: 
      -- 
        configId: 1
        localStreamName: stream2
        status: 
          current: 
            description: Streaming
            uniqueStreamId: 1
        uri: sercom://0
    push: []
    record: []
    webrtc: []


STEP 911:

At that same telnet console,need to give the below command for RTSP  streaming

pushStream uri=rtsp://camera_ip:5544 localStreamName=stream2

Example:

pushStream uri=rtsp://192.168.43.146:5544 localStreamName=stream2

Code Block
languagebash
titleConsole output
pushStream uri=rtsp://192.168.43.146:5544 localStreamName=stream2
Command entered successfully!
Local stream stream2 enqueued for pushing to rtsp://192.168.43.146:5544 as stream2

    configId: 4
    forceTcp: false
    keepAlive: true
    localStreamName: stream2
    targetStreamName: stream2
    targetStreamType: live
    targetUri: 
      fullUri: rtsp://192.168.43.146:5544
      port: 5544
      scheme: rtsp

STEP 10:

On VLC player, for RTSP streaming

need to enter media → Open Network Stream option and then give rtsp URL to play streaming content in VLC

rtsp://camera_ip:5544/stream2

Example :rtsp://192.168.43.146:5544/stream2

Image Removed

We can able to see the live streaming content on VLC Player.

                                              ( OR )

On PC, Able to play the camera live streaming content with the below gstreamer pipeline,before trying this pipeline we should install gstreamer specific packages.

gst-launch-1.0 rtspsrc location=rtsp://camera_ip:5544/stream2 ! rtph264depay name=demux ! h264parse ! avdec_h264 ! videoconvert ! autovideosink

Example:

...

port: 5544
      scheme: rtsp


STEP 12:

On VLC player, for RTSP streaming

need to enter media → Open Network Stream option and then give rtsp URL to play streaming content in VLC

rtsp://camera_ip:5544/stream2

Example :rtsp://192.168.43.146:5544/stream2

Image Added

We can able to see the live streaming content on VLC Player.

Note: VLC player available PC and RPI target should run in same network.

Limitations

  •  RMS validation with libcamera works only with SD resolution.
  • Observed 2 to 3 sec's of glitches in RMS with RTSP validation using both v4l2 and libcamera