How to make an auto starting and looping video player with video files on USB drive



1. Format SD card

From Mac or PC download software: “SD Formatter” and format the SD card.

2. Download image

From Mac or PC download: Raspbian lite

3. Flash SD card with "Raspbian lite" image

On Mac or PC use software: “Balena Etcher” to flash SD card with Raspbian lite image.

4. Boot up Raspberry Pi

Login: pi
Password: raspberry
Then open Raspberry Pi config. "sudo" gives you root (administrator) rights:


$ sudo raspi-config

Only if you have norwegian keyboard:
Localisation options -> Change Keyboard Layout -> Generic 105-key PC -> Other -> Norwegian -> Norwegian (top) -> The default for the keyboard layout -> No compose key

Boot Options -> Desktop / CLI -> Console Autologin

Interfacing Options -> SSH -> enable -> YES

Advanced Options -> Memory Split -> Replace with: 256 -> OK

Network Options -> Wi-fi -> Enter your wi-fi SSID (name of wi-fi network) -> Enter your wi-fi password (if you don't have wi-fi, use an internet connected ethernet cable)

5. Auto mount USB drive

You may now copy a videofile to the USB drive (see point 10 for info about codec) and then insert USB drive and type:


$ sudo blkid

Find name of drive e.g. “/dev/sda1". I think the first drive connected is always “/dev/sda1” on Raspberry Pi. Then open "fstab" with the text editor "Nano":


$ sudo nano /etc/fstab

Type this at the bottom. Make sure you type it exactly as here, or else the pi might not boot up and you will have to start over at point nr. 3. The USB drive will be read-only to minimize the risk of a dirty unmount.


/dev/sda1 /home/pi/usbdrv vfat uid=pi,gid=pi,umask=0022,sync,auto,nosuid,ro,nouser 0 0

"Ctrl-X" -> type big "Y" and press ENTER to confirm exit and save. Then reboot:


$ sudo reboot

After reboot type "ls" to list current directory:


$ ls

You will now see usbdrv. Type this to change directory to usbdrv:


$ cd usbdrv

Then type "ls" again to list files in usbdrv directory that is now hopefully the contents of your USB drive:


$ ls

6. Install omxplayer

Make sure your pi is connected to the internet. Just connect an internet connected ethernet cable if you don't have wi-fi and reboot ("sudo reboot"). First update apt-get (Advanced Packaging Tool - software management):


$ sudo apt-get update

Then install "Omxplayer":


$ sudo apt-get install omxplayer

This will install Omxplayer and all libraries Omxplayer is dependent on.
"Do you want to continue?"
Type big "Y" and press ENTER

7. Looping script

First go to the home directory on the pi:


$ cd /home/pi

Then create the looping script:

	
$ sudo nano loopingVideo.sh

Then type this exactly like here:

	
#!/bin/sh
VIDEOPATH="/home/pi/usbdrv"
SERVICE="omxplayer"
while true; do
if ps ax | grep -v grep | grep $SERVICE > /dev/null
	then
	sleep 1;
else
	for entry in $VIDEOPATH/*
	do
		clear
		omxplayer -o both $entry > /dev/null
	done
fi
done

Omxplayer overruns hdmi/audio jack options in raspi-config (amixer). "-o both" in script directs audio to both.
"Ctrl-X" to save and exit
Type big "Y" and press ENTER to confirm

Type "ls" to see the file:


$ ls

Then make the file executable (runable):

	
$ sudo chmod +x loopingVideo.sh

Type "ls" again and see that the file has changed color to green:


$ ls


8. Disable dhcp (internet)

This is not mandatory, but the boot will go faster as the pi will not spend time looking for internet connection that is not there:


$ sudo update-rc.d dhcpcd disable

If you want to enable internet again, type:


$ sudo update-rc.d dhcpcd enable


9. Hide console and autorun script on startup boot

Using "/.bashrc" makes it possible to use the keyboard to exit script loop with "ctrl-c". ".bashrc" runs after the user is logged in. It also means that the script will start if you connect to the pi with ssh.


$ sudo nano /home/pi/.bashrc

Type this at the bottom of the text. The first line here makes sure the screen behind the video is black and is not showing console text. "0" means it turns the screen black after 0 minutes. "setterm -cursor off" turns off the blinking type cursor. And the last line runst the script.


setterm -blank 0
setterm -cursor off
/home/pi/loopingVideo.sh


10. Use correct video codec

- Copy your videofile to USB drive. Make sure the filename does not contain special characters or spaces.
- h264 codec works best. Apple Prores or Intermediate codec does not work.
- You can place multiple files on USB drive and they will play after each other
- You can also place audio wav files on the USB drive

11. Boot up pi

- Insert USB drive before you give power to the pi. If you boot up the pi without USB drive connected, it will stop booting when trying to find USB drive. (/dev/sda1). Insert USB drive or the boot will fail.
- Connect pi to screen and power on screen
- The last thing to connect to pi is power
- The movie should automatically start playing after boot sequence with no console text showing.
- You can now use the pi with just hdmi, USB drive and power connected. If you want to abort the video and do something on the pi, just connect a keyboard and press "ctrl-c". If you want the type cursor back type "setterm -cursor on".



Troubleshoot

Lightning icon on screen means it is getting too little power -> use power supply with higher ampere

Issues when formatting on Windows

We had trouble getting this to work if the USB drive was formatted on Windows. It worked if we used macOS or Raspberry Pi to format.

Here is how to do it on the pi: To show the USB drive among all storage partitions and volumes on your pi use:



$ lsblk

You can also use:



$ df

or:


$ blkid

Suppose it may be /dev/sda1. Unmount it with:



$ sudo umount /dev/sda1

To format drive with the FAT32 file system format:



$ sudo mkfs.vfat /dev/sda1


To set a label name for your drive:



$ sudo mkfs.vfat -n 'name_for_your_pendrive' /dev/sda1