RidgeRun gst-crypto GStreamer Plugin: Difference between revisions
mNo edit summary |
|||
Line 104: | Line 104: | ||
==== ''fs/apps/gst-crypto-0.10.0/Config'' ==== | ==== ''fs/apps/gst-crypto-0.10.0/Config'' ==== | ||
<source lang="bash"> | |||
config FS_APPS_GST_CRYPTO | config FS_APPS_GST_CRYPTO | ||
bool "gst-crypto-0.10.0" | bool "gst-crypto-0.10.0" | ||
Line 109: | Line 110: | ||
help | help | ||
This option enables RidgeRuns gst-crypto plugin. | This option enables RidgeRuns gst-crypto plugin. | ||
</source> | |||
==== ''fs/apps/gst-crypto-0.10.0/Makefile'' ==== | ==== ''fs/apps/gst-crypto-0.10.0/Makefile'' ==== | ||
<source lang="bash"> | |||
#$L$ | #$L$ | ||
# Copyright (C) 2015 Ridgerun (http://www.ridgerun.com). | # Copyright (C) 2015 Ridgerun (http://www.ridgerun.com). | ||
Line 122: | Line 125: | ||
include ../../../bsp/classes/rrsdk.class | include ../../../bsp/classes/rrsdk.class | ||
include $(CLASSES)/gstreamer-plugin.class | include $(CLASSES)/gstreamer-plugin.class | ||
</source> | |||
==== ''fs/apps/gst-crypto-0.10.0/metainfo'' ==== | ==== ''fs/apps/gst-crypto-0.10.0/metainfo'' ==== | ||
<source lang="bash"> | |||
TARGET_REQUIRED="gstreamer gst-plugins-base" | TARGET_REQUIRED="gstreamer gst-plugins-base" | ||
</source> | |||
==== RR SDK GStreamer configuration ==== | ==== RR SDK GStreamer configuration ==== | ||
Line 131: | Line 137: | ||
===== Execution ===== | ===== Execution ===== | ||
<source lang="bash"> | |||
`make env` | `make env` | ||
make config | |||
</source> | |||
===== Configuration ===== | ===== Configuration ===== | ||
<source lang="bash"> | |||
File System Configuration ---> | File System Configuration ---> | ||
Select target's file system software ---> | Select target's file system software ---> | ||
[*] gst-crypto-0.10.0 | [*] gst-crypto-0.10.0 | ||
</source> | |||
=== GStreamer 1.x === | === GStreamer 1.x === | ||
Line 153: | Line 163: | ||
==== ''fs/apps/gst-crypto-1.0/Config'' ==== | ==== ''fs/apps/gst-crypto-1.0/Config'' ==== | ||
<source lang="bash"> | |||
config FS_APPS_GST_CRYPTO | config FS_APPS_GST_CRYPTO | ||
bool "gst-crypto-1.0" | bool "gst-crypto-1.0" | ||
Line 158: | Line 169: | ||
help | help | ||
This option enables RidgeRuns gst-crypto plugin. | This option enables RidgeRuns gst-crypto plugin. | ||
</source> | |||
==== ''fs/apps/gst-crypto-1.0/Makefile'' ==== | ==== ''fs/apps/gst-crypto-1.0/Makefile'' ==== | ||
<source lang="bash"> | |||
#$L$ | #$L$ | ||
# Copyright (C) 2015 Ridgerun (http://www.ridgerun.com). | # Copyright (C) 2015 Ridgerun (http://www.ridgerun.com). | ||
Line 171: | Line 184: | ||
include ../../../bsp/classes/rrsdk.class | include ../../../bsp/classes/rrsdk.class | ||
include $(CLASSES)/gstreamer-plugin.class | include $(CLASSES)/gstreamer-plugin.class | ||
</source> | |||
==== ''fs/apps/gst-crypto-1.0/metainfo'' ==== | ==== ''fs/apps/gst-crypto-1.0/metainfo'' ==== | ||
<source lang="bash"> | |||
TARGET_REQUIRED="gstreamer gst-plugins-base" | TARGET_REQUIRED="gstreamer gst-plugins-base" | ||
</source> | |||
==== RR SDK GStreamer configuration ==== | ==== RR SDK GStreamer configuration ==== | ||
Line 180: | Line 196: | ||
===== Execution ===== | ===== Execution ===== | ||
<source lang="bash"> | |||
`make env` | |||
make config | make config | ||
</source> | |||
===== Configuration ===== | ===== Configuration ===== | ||
<source lang="bash"> | |||
File System Configuration ---> | File System Configuration ---> | ||
Select target's file system software ---> | Select target's file system software ---> | ||
[*] gst-crypto-1.0 | [*] gst-crypto-1.0 | ||
</source> | |||
{{ContactUs}} | |||
== Example pipelines == | == Example pipelines == |
Revision as of 13:28, 30 April 2020
|
|
gst-crypto Overview
RidgeRun's gst-crypto plugin makes it easy to encrypt or decrypt content passing through a GStreamer pipeline. gst-crypto will take advantage of any available crypto hardware accelerators. gst-crypto is based on OpenSSL so any encryption technology supported by OpenSSL can be supported by gst-crypto. Currently, only aes-128-cbc cipher is support. gst-crypto source code has not yet been reviewed by experts for security deficiencies.
Also gst-crypto does not support seeking and some mux/demuxers, please inquire in case this is needed. RidgeRun has solutions that supports seeking while doing decrypting.
gst-crypto Features
- aes-128-cbc cipher support
- Password or key/iv setup
- GStreamer 0.10.x support
- GStreamer 1.x support
Example Use Cases
- Capture audio/video from a camera directly into an encrypted media file.
- Decrypt streaming audio/video and render to local display/speakers.
GStreamer Plugin Support
Please Contact RidgeRun for any modifications or extensions needed and Integration into other Embedded Linux Systems (e.g. Ubuntu, Yocto, ...).
Build and run on a local Linux PC
Tested on Ubuntu-14.04 64 bit:
Source code fetch
git clone git@github.com:RidgeRun/gst-crypto cd gst-crypto
GStreamer 0.10.x
git checkout release-0.10
GStreamer 1.x
git checkout release-1.0
Note: There are tagged releases also.
Compilation
./autogen.sh ./configure make sudo make install
If you don't want to install into your system you can specify directory path with:
GST_PLUGIN_PATH=src/.libs/ gst-launch ....
gst-crypto Source code
Location
RR SDK Integration
One of our demo SDK's can be used:
- i.MX6 SabreLite board - with crypto hardware acceleration
- DM368 Leopard board - no crypto hardware available
GStreamer 0.10.x
Note: v0.10.0 (gst-crypto-0.10.0.tar.gz) contains a bug that names the plugin gst-crypto instead of crypto. Please keep that in mind when running the test pipelines.
Subdirectory structure
├── fs ├── apps ├── gst-crypto-0.10.0 ├── Config ├── Makefile └── metainfo
fs/apps/gst-crypto-0.10.0/Config
config FS_APPS_GST_CRYPTO bool "gst-crypto-0.10.0" select FS_APPS_GSTREAMER_PLUGINS_BASE help This option enables RidgeRuns gst-crypto plugin.
fs/apps/gst-crypto-0.10.0/Makefile
#$L$ # Copyright (C) 2015 Ridgerun (http://www.ridgerun.com). ##$L$ PKG_URL=********************* PKG_TARBALL=gst-crypto-0.10.0.tar.gz PKG_SHA1SUM=61fdeeeb81cc339764a0c637fcd486c3861fa1a8 include ../../../bsp/classes/rrsdk.class include $(CLASSES)/gstreamer-plugin.class
fs/apps/gst-crypto-0.10.0/metainfo
TARGET_REQUIRED="gstreamer gst-plugins-base"
RR SDK GStreamer configuration
Execution
`make env` make config
Configuration
File System Configuration ---> Select target's file system software ---> [*] gst-crypto-0.10.0
GStreamer 1.x
Subdirectory structure
├── fs ├── apps ├── gst-crypto-1.0 ├── Config ├── Makefile └── metainfo
fs/apps/gst-crypto-1.0/Config
config FS_APPS_GST_CRYPTO bool "gst-crypto-1.0" select FS_APPS_GSTREAMER_PLUGINS_BASE help This option enables RidgeRuns gst-crypto plugin.
fs/apps/gst-crypto-1.0/Makefile
#$L$ # Copyright (C) 2015 Ridgerun (http://www.ridgerun.com). ##$L$ PKG_URL=https://www.ridgerun.com/packages PKG_TARBALL=gst-crypto-1.0.tar.gz PKG_SHA1SUM=321bf7787bd4a4667c2f150df84bf6a9c138a15a include ../../../bsp/classes/rrsdk.class include $(CLASSES)/gstreamer-plugin.class
fs/apps/gst-crypto-1.0/metainfo
TARGET_REQUIRED="gstreamer gst-plugins-base"
RR SDK GStreamer configuration
Execution
`make env` make config
Configuration
File System Configuration ---> Select target's file system software ---> [*] gst-crypto-1.0
RidgeRun Resources | |||||||||||||||||||
Contact Us
Example pipelinesTest pipelineGStreamer 0.10.xOn RR SDK after regular installation to /usr/lib/gstreamer-0.10echo "This is a crypto test ... " > plain.txt && gst-launch filesrc location=plain.txt ! crypto mode=enc ! crypto mode=dec ! filesink location=dec.txt && cat dec.txt On Ubuntu after default installation to /usr/local/lib/gstreamer.0.10echo "This is a crypto test ... " > plain.txt && gst-launch --gst-plugin-path=/usr/local/lib/gstreamer-0.10 filesrc location=plain.txt ! crypto mode=enc ! gst-crypto mode=dec ! filesink location=dec.txt && cat dec.txt Note: You could also test the plugin without make install. Just run the pipeline from the source tree like: GST_PLUGIN_PATH=src/.libs/ gst-launch <some other elements> ! crypto ! <some other elements> GStreamer 1.xOn RR SDK after regular installation to /usr/lib/gstreamer-1.0echo "This is a crypto test ... " > plain.txt && gst-launch-1.0 filesrc location=plain.txt ! crypto mode=enc ! crypto mode=dec ! filesink location=dec.txt && cat dec.txt On Ubuntu after default installation to /usr/local/lib/gstreamer-1.0echo "This is a crypto test ... " > plain.txt && gst-launch-1.0 --gst-plugin-path=/usr/local/lib/gstreamer-1.0 filesrc location=plain.txt ! crypto mode=enc ! crypto mode=dec ! filesink location=dec.txt && cat dec.txt Note: You could also test the plugin without make install. Just run the pipeline from the source tree like: GST_PLUGIN_PATH=src/.libs/ gst-launch-1.0 <some other elements> ! crypto ! <some other elements> Creating an encrypted video with the openssl tool and playbackDownload demo videowget http://blender-mirror.kino3d.org/peach/bigbuckbunny_movies/big_buck_bunny_720p_surround.avi Encryptopenssl enc -k RidgeRun -nosalt -aes-128-cbc -in big_buck_bunny_720p_surround.avi -out big_buck_bunny_720p_surround.avi.enc PlaybackPlayback on a local displayGStreamer 0.10.xOn RR SDK after regular installation to /usr/lib/gstreamer-0.10gst-launch filesrc location=big_buck_bunny_720p_surround.avi.enc ! crypto mode=dec ! queue ! avidemux ! ffdec_mpeg4 ! queue ! xvimagesink Note: The default password is RidgeRun. Change the password in the above openssl command and use the pass property of gst-crypto to use a different one. On Ubuntu after default installation to /usr/local/lib/gstreamer-0.10gst-launch --gst-plugin-path=/usr/local/lib/gstreamer-0.10 filesrc location=big_buck_bunny_720p_surround.avi.enc ! crypto mode=dec ! queue ! avidemux ! ffdec_mpeg4 ! queue ! xvimagesink Note: The default password is RidgeRun. Change the password in the above openssl command and use the pass property of gst-crypto to use a different one. Note: You could also test the plugin without make install. Just run the pipeline from the source tree like: GST_PLUGIN_PATH=src/.libs/ gst-launch <some other elements> ! crypto ! <some other elements> GStreamer 1.xOn RR SDK after regular installation to /usr/lib/gstreamer-1.0gst-launch-1.0 filesrc location=big_buck_bunny_720p_surround.avi.enc ! crypto mode=dec ! queue ! avidemux ! h264parse ! avdec_h264 ! queue ! xvimagesink Note: The default password is RidgeRun. Change the password in the above openssl command and use the pass property of gst-crypto to use a different one. On Ubuntu after default installation to /usr/local/lib/gstreamer-1.0gst-launch-1.0 --gst-plugin-path=/usr/local/lib/gstreamer-1.0 filesrc location=big_buck_bunny_720p_surround.avi.enc ! crypto mode=dec ! queue ! avidemux ! decodebin ! queue ! xvimagesink Note: The default password is RidgeRun. Change the password in the above openssl command and use the pass property of gst-crypto to use a different one. Note: You could also test the plugin without make install. Just run the pipeline from the source tree like: GST_PLUGIN_PATH=src/.libs/ gst-launch-1.0 <some other elements> ! crypto ! <some other elements> Streaming to a hostOn the target boardGStreamer 0.10.xOn RR SDK after regular installation to /usr/lib/gstreamer-0.10 gst-launch filesrc location=big_buck_bunny_720p_surround.avi.enc ! crypto mode=dec ! queue ! avidemux ! mpegtsmux ! queue ! udpsink port=3000 host=10.251.101.40 sync=true enable-last-buffer=false Note: Replace the IP address according to your host system. Note: The default password is RidgeRun. Change the password in the above openssl command and use the pass property of gst-crypto to use a different one. On Ubuntu after default installation to /usr/local/lib/gstreamer-0.10 gst-launch --gst-plugin-path=/usr/local/lib/gstreamer-0.10 filesrc location=big_buck_bunny_720p_surround.avi.enc ! crypto mode=dec ! queue ! avidemux ! mpegtsmux ! queue ! udpsink port=3000 host=10.251.101.40 sync=true enable-last-buffer=false Note: Replace the IP address according to your host system. Note: The default password is RidgeRun. Change the password in the above openssl command and use the pass property of gst-crypto to use a different one. Note: You could also test the plugin without make install. Just run the pipeline from the source tree like: GST_PLUGIN_PATH=src/.libs/ gst-launch <some other elements> ! crypto ! <some other elements> GStreamer 1.xOn RR SDK after regular installation to /usr/lib/gstreamer-1.0 gst-launch-1.0 filesrc location=big_buck_bunny_720p_surround.avi.enc ! crypto mode=dec ! queue ! avidemux ! mpegtsmux ! queue ! udpsink port=3000 host=10.251.101.40 sync=true enable-last-buffer=false Note: Replace the IP address according to your host system. Note: The default password is RidgeRun. Change the password in the above openssl command and use the pass property of gst-crypto to use a different one. On Ubuntu after default installation to /usr/local/lib/gstreamer-1.0 gst-launch-1.0 --gst-plugin-path=/usr/local/lib/gstreamer-1.0 filesrc location=big_buck_bunny_720p_surround.avi.enc ! crypto mode=dec ! queue ! avidemux ! mpegtsmux ! queue ! udpsink port=3000 host=10.251.101.40 sync=true enable-last-buffer=false Note: Replace the IP address according to your host system. Note: The default password is RidgeRun. Change the password in the above openssl command and use the pass property of gst-crypto to use a different one. Note: You could also test the plugin without make install. Just run the pipeline from the source tree like: GST_PLUGIN_PATH=src/.libs/ gst-launch <some other elements> ! crypto ! <some other elements> On the hostgst-launch udpsrc port=3000 ! mpegtsdemux ! queue ! decodebin ! fpsdisplaysink sync=true async=false Encoding/Decoding Playback PipelinesGStreamer 1.0
gst-launch-1.0 -e videotestsrc is-live=true ! x264enc ! queue ! h264parse ! mpegtsmux ! filesink location=test.ts sync=true gst-launch-1.0 filesrc location=test.ts ! crypto mode=enc ! filesink location=test.ts.enc gst-launch-1.0 filesrc location=test.ts.enc ! crypto mode=dec ! queue ! tsdemux ! h264parse ! avdec_h264 ! queue ! xvimagesink
gst-launch-1.0 videotestsrc is-live=true num-buffers=300 ! "video/x-raw,width=(int)1280,height=(int)720,framerate=(fraction)30/1" ! x264enc ! avimux ! filesink location=test.avi gst-launch-1.0 filesrc location=test.avi ! crypto mode=enc ! filesink location=test.avi.enc gst-launch-1.0 filesrc location=test.avi.enc ! crypto mode=dec ! queue ! avidemux ! h264parse ! avdec_h264 ! queue ! xvimagesink
wget https://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_h264.mov gst-launch-1.0 filesrc location=big_buck_bunny_480p_h264.mov ! crypto mode=enc ! filesink location=big_buck_bunny_480p_h264.mov.enc gst-launch-1.0 filesrc location=big_buck_bunny_480p_h264.mov.enc ! crypto mode=dec ! filesink location=big_buck_bunny_480p_h264.mov.dec gst-launch-1.0 filesrc location=big_buck_bunny_480p_h264.mov.dec ! qtdemux ! h264parse ! avdec_h264 ! queue ! xvimagesink
gst-launch-1.0 -e videotestsrc is-live=true ! x264enc ! queue ! h264parse ! mpegtsmux ! filesink location=test.ts sync=true openssl enc -k RidgeRun -nosalt -aes-128-cbc -in test.ts -out test.ts.enc gst-launch-1.0 filesrc location=test.ts.enc ! crypto mode=dec ! queue ! tsdemux ! h264parse ! avdec_h264 ! queue ! xvimagesink
gst-launch-1.0 videotestsrc is-live=true num-buffers=300 ! "video/x-raw,width=(int)1280,height=(int)720,framerate=(fraction)30/1" ! x264enc ! avimux ! filesink location=test.avi openssl enc -k RidgeRun -nosalt -aes-128-cbc -in test.avi -out test.avi.enc gst-launch-1.0 filesrc location=test.avi.enc ! crypto mode=dec ! queue ! avidemux ! h264parse ! avdec_h264 ! queue ! xvimagesink Using Crypto Hardware AccelerationCrypto Hardware Acceleration can be used transparently with the plugin and can be configured independently. There are some considerations to take into account:
See:
test pipelines for release2.0Raw data fileEncode gst-launch-1.0 filesrc location=small-file.file ! crypto mode=enc ! filesink location=small-file.file.enc Decode gst-launch-1.0 filesrc location=small-file.file.enc ! crypto mode=dec ! filesink location=output.dec Notes: 1 byte file, content was verified before/after crypto encode/decode, data was not affected by encode/decode process Big Buck Bunny avi fileEncode file with gst-crypto gst-launch-1.0 filesrc location=big_buck_bunny_1080p_surround.avi ! crypto mode=enc ! filesink location=big_buck_bunny_1080p_surround.avi.enc Decode and display gst-launch-1.0 filesrc location=big_buck_bunny_1080p_surround.avi.enc blocksize=4096 ! crypto mode=dec ! queue ! avidemux ! avdec_mpeg4 ! xvimagesink Encoding with openssl Decoding also work when using openssl for encoding Encode with openssl openssl enc -k RidgeRun -nosalt -aes-128-cbc -in big_buck_bunny_1080p_surround.avi -out openssl-enc-big_buck_bunny_1080p_surround.avi.enc Decode and display gst-launch-1.0 filesrc location=openssl-enc-big_buck_bunny_1080p_surround.avi.enc blocksize=4096 ! crypto mode=dec ! queue ! avidemux ! avdec_mpeg4 ! xvimagesink Audio/video decode file Note: this pipeline can be optimized, just for testing. GST_DEBUG=3 gst-launch-1.0 filesrc location=big_buck_bunny_1080p_surround.avi.enc ! crypto mode=dec ! queue ! avidemux name=demux demux.video_0 ! 'video/mpeg, mpegversion=(int)4' ! queue ! avdec_mpeg4 ! xvimagesink async=false demux.audio_0 ! queue ! decodebin ! audioconvert ! alsasink async=false iMX6 example pipelines Tested on iMX6 Nitrogen6x board with RidgeRun SDK: Avi decrypt and playback gst-launch-1.0 filesrc location=/mnt/big_buck_bunny_1080p_surround.avi.enc ! crypto mode=dec ! queue ! avidemux name=demux demux.video_0 ! 'video/mpeg, mpegversion=(int)4' ! queue ! vpudec ! imxv4l2sink name=videosink device=/dev/video17 async=false iMX6 transport stream gst-launch-1.0 filesrc location=/mnt/test.ts.enc ! crypto mode=dec ! queue ! tsdemux ! vpudec ! imxv4l2sink name=videosink device=/dev/video17 async=false
|