Play Media in a Web Entity
Web entities can play a number of different media formats through embedded players.
Supported Media Formats
Currently, exclusively open source formats are supported:
Container format |
Supported codecs |
File extension(s) |
---|---|---|
WebM |
Video: VP8, VP9 Audio: Vorbis, Opus |
.webm |
Matroska |
Video: Theora, VP8, VP9 Audio: Vorbis, Opus, FLAC, MP3 |
.mkv, .mk3d, .mka, .mks |
Ogg |
Video: Theora, VP8 Audio: Vorbis, Opus, FLAC |
.ogg, .oga, .ogv |
Video codec |
Comments |
Supported containers |
---|---|---|
VP9 (recommended) |
Good quality, slow encoding. |
WebM, Matroska |
VP8 |
Recommended if your APU has hardware accelerated encoding for VP8, but not VP9. Slightly faster than VP9. Slightly lower quality to compression ratio than VP9. |
WebM, Matroska |
Theora |
Low quality, low compression, outdated. |
Matroska |
Audio codec |
Comments |
Supported containers |
---|---|---|
Opus |
Recommended, works well with high and low bitrate. |
WebM, Matroska, Ogg |
Vorbis |
Lower quality to compression ratio than Opus. |
WebM, Matroska, Ogg |
FLAC |
Lossless, bigger files. |
Matroska, Ogg |
MP3 |
Lower quality to compression ratio than Opus and Vorbis. |
Matroska |
Re-encode Media with FFmpeg
Here are some example commands for reencoding video files using FFmpeg.
Encode |
Command |
Comments |
---|---|---|
VP9, Opus, WebM |
ffmpeg -i "INPUTFILE" -c:v libvpx-vp9 -b:v 0 -crf 5 -vf scale=-2:600 -cpu-used 5 -row-mt 1 -c:a libopus -b:a 96K "OUTPUTFILE.webm" |
"-vf scale=-2:600" scales the video down to 600p vertical resolution while keeping the aspect ratio. "-crf 5" is the video quality from 0 to 63, lower being better. For the constant quality to work the bitrate has to be set to "0" via "-b:v 0". |
VP9 (Hardware accelerated), Opus, WebM |
ffmpeg -i "INPUTFILE" -c:v vp9_vaapi -b:v 2000k -c:a libopus -b:a 96K "OUTPUTFILE.webm" |
VP9 hardware acceleration is currently only supported by Intel Kaby Lake or newer APUs. Hardware accelerated VP9 does not have a constant quality setting, so bitrate needs to be used instead. |
VP8 (Hardware accelerated), Opus, WebM |
ffmpeg -i "INPUTFILE" -c:v vp8_vaapi -b:v 2000k -vf scale=-2:600 -c:a libopus -b:a 96K "OUTPUTFILE.webm" |
VP8 hardware acceleration is currently only supported by Intel Cherryview/Braswell and newer APUs. |
Theora, Opus, Matroska |
ffmpeg -i "INPUTFILE" -c:v libtheora -q:v 10 -vf scale=-2:600 -c:a libopus -b:a 96K "OUTPUTFILE.mkv" |
"-q:v 10" is the quality from 0 to 10, higher being better. |
You can use the ffmpeg -codecs
command to see supported codecs.
Additional info can be found with the command ffmpeg -h
Alternatively you can explore these links:
Batch Processing
Here is an example shell script to batch reencode the contents of a folder on Linux using FFmpeg:
You can name it: vircadia_reencode.sh
With this code in it:
# Modified version of https://gist.github.com/ralphcrisostomo/56fc395b1646bd55aeeb2eb442043887
# Usage: ./vircadia_reencode.sh /SourceDirectory /DestinationDirectory
SOURCE=$1
DESTINATION=$2
while IFS= read -d '' -r ITEM
do
echo $ITEM
FILE=${ITEM##*/}
EXT=${ITEM##*.}
EXT=$(echo $EXT | tr "[:upper:]" "[:lower:]")
OUTPUT="$DESTINATION/${FILE%.*}.mkv"
# Create directory
[[ -d $DESTINATION ]] || mkdir -p $DESTINATION
echo "" | ffmpeg -i "$ITEM" -c:v libvpx-vp9 -b:v 0 -crf 5 -vf scale=-2:600 -cpu-used 5 -row-mt 1 -c:a libopus -b:a 96K "$OUTPUT"
# All files with the listed extensions will be reencoded.
done< <(find "$SOURCE" \( -iname '*.mp4' -or -iname '*.avi' -or -iname '*.mkv' -or -iname '*.mts' \) -print0) |
참고
Do not forget to set the script as executable on Linux using something like chmod +x vircadia_reencode.sh
Video Player
You can embed videos using the HTML5 video tag. This example code can be put into an HTML file on a web server and be used in a Web entity.
<video controls="controls" src="EXAMPLEDIRECTORY/EXAMPLEFILE.webm">
Your browser does not support the HTML5 Video element.
</video>
See Also