From a54afa23650cc7b7cf4ab4479afc422f33ef991b Mon Sep 17 00:00:00 2001 From: Romain Bouqueau Date: Tue, 2 Jun 2026 12:18:08 -0400 Subject: [PATCH 1/4] fix wrong prop name --- .../encryption-commercial-DRMs-CPIX.md | 0 docs/Howtos/encryption/encryption-filters.md | 2 +- mkdocs.yml | 317 +++++++++--------- 3 files changed, 160 insertions(+), 159 deletions(-) create mode 100644 docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md diff --git a/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md b/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/Howtos/encryption/encryption-filters.md b/docs/Howtos/encryption/encryption-filters.md index e4d54b38..dfd60ebf 100644 --- a/docs/Howtos/encryption/encryption-filters.md +++ b/docs/Howtos/encryption/encryption-filters.md @@ -94,7 +94,7 @@ gpac -i udp://localhost:1234/:FID=in cecrypt:cfile=drm_audio.xml:SID=in#audio:FI Another possibility is to define the `CryptInfo` PID property rather than using a global DRM config file. Combining this with conditional PID property assignment you get: ``` -gpac -i udp://localhost:1234/:#CrypTrack=(audio)drm_audio.xml,(video)drm_video.xml cecrypt -o dest.mpd:profile=live:dmode=dynamic +gpac -i udp://localhost:1234/:#CryptInfo=(audio)drm_audio.xml,(video)drm_video.xml cecrypt -o dest.mpd:profile=live:dmode=dynamic ``` This example assigns: diff --git a/mkdocs.yml b/mkdocs.yml index f5130650..0ac8b390 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -170,6 +170,7 @@ nav: - Introduction: Howtos/encryption/Encryption-Introduction.md - Encryption and filters: Howtos/encryption/encryption-filters.md - Clearkey: Howtos/encryption/encryption-clearkey.md + - Commercial DRMs: Howtos/encryption/encryption-commercial-DRMs-CPIX.md - Javascript Filters: - Overview: Howtos/jsf/jsfilter.md - JavaScript Session: Howtos/jsf/jssession.md @@ -215,164 +216,164 @@ nav: - Global options: Filters/core_options.md - Logging: Filters/core_logs.md - Filters: - - Stream Manipulation: - - Audio/Video rewinder: Filters/rewind.md - - Bitstream metadata rewriter: Filters/bsrw.md - - FFmpeg bitstream filter: Filters/ffbsf.md - - HEVC Tile aggregator: Filters/tileagg.md - - HEVC Tile extractor: Filters/hevcsplit.md - - HEVC Tile merger: Filters/hevcmerge.md - - HEVC Tile splitter: Filters/tilesplit.md - - Layered bitstream aggregator: Filters/bsagg.md - - Layered bitstream splitter: Filters/bssplit.md - - MPEG-2 TS splitter: Filters/tssplit.md - - MPEG-2 TS timestamper: Filters/tsgendts.md - - Media reframer: Filters/reframer.md - - SEI message loader: Filters/seiload.md - - Sources concatenator: Filters/flist.md - - Timestamp rewriter: Filters/restamp.md - - Multimedia I/O: - - AV Counter Generator: Filters/avgen.md - - Audio output: Filters/aout.md - - DVB for Linux: Filters/dvbin.md - - DekTec SDI output: Filters/dtout.md - - FFmpeg AV capture: Filters/ffavin.md - - Text Generator: Filters/txtgen.md - - Uncompressed Video Generator: Filters/uncvg.md - - Video output: Filters/vout.md - - Web-based AV capture: Filters/webgrab.md - - Protocols I/O: - - DASH & HLS client: Filters/dashin.md - - DASH & HLS segmenter: Filters/dasher.md - - File input: Filters/fin.md - - File output: Filters/fout.md - - HTTP input: Filters/httpin.md - - HTTP server: Filters/httpout.md - - MABR & ROUTE input: Filters/routein.md - - MABR & ROUTE output: Filters/routeout.md - - Media Server: Filters/mediaserver.md - - Pipe input: Filters/pin.md - - Pipe output: Filters/pout.md - - RTP Streamer: Filters/rtpout.md - - RTP/RTSP/SDP input: Filters/rtpin.md - - RTSP server: Filters/rtspout.md - - UDP/TCP input: Filters/sockin.md - - UDP/TCP output: Filters/sockout.md - - Text & Subtitles: - - Subtitle loader: Filters/txtin.md - - TTML sample merger: Filters/ttmlmerge.md - - TTML to SRT: Filters/ttml2srt.md - - TTML to WebVTT: Filters/ttml2vtt.md - - TX3G to SRT: Filters/tx3g2srt.md - - TX3G to TTML: Filters/tx3g2ttml.md - - TX3G to WebVTT: Filters/tx3g2vtt.md - - WebVTT to TX3G: Filters/vtt2tx3g.md - - Audio & Video Processing: - - Audio Video mixer: Filters/avmix.md - - Audio resampler: Filters/resample.md - - Compositor: Filters/compositor.md - - EVG video rescaler: Filters/evgs.md - - FFmpeg AV Filter: Filters/ffavf.md - - FFmpeg video rescaler: Filters/ffsws.md - - GPU texture uploader: Filters/glpush.md - - Thumbnail generator: Filters/thumbs.md - - Video cropper: Filters/vcrop.md - - Video flipper: Filters/vflip.md - - Utilities & Tools: - - JavaScript filter: Filters/jsf.md - - NHML reader: Filters/nhmlr.md - - NHML writer: Filters/nhmlw.md - - NHNT reader: Filters/nhntr.md - - NHNT writer: Filters/nhntw.md - - Packet inspector: Filters/inspect.md - - Source prober: Filters/probe.md - - Stream rewriter: Filters/unframer.md - - Stream to File converter: Filters/writegen.md - - Cryptography: - - CENC decryptor: Filters/cdcrypt.md - - CENC encryptor: Filters/cecrypt.md - - CryptFile input: Filters/cryptin.md - - CryptFile output: Filters/cryptout.md - - Bitstream Framing: - - AC3 reframer: Filters/rfac3.md - - AC4 reframer: Filters/rfac4.md - - AC4 writer: Filters/ufac4.md - - ADTS reframer: Filters/rfadts.md - - ADTS rewriter: Filters/ufadts.md - - AMR/EVRC reframer: Filters/rfamr.md - - AV1/IVF/VP9/IAMF reframer: Filters/rfav1.md - - AVC/HEVC reframer: Filters/rfnalu.md - - AVC/HEVC to AnnexB rewriter: Filters/ufnalu.md - - FLAC reframer: Filters/rfflac.md - - Framed to Unframed converter: Filters/writeuf.md - - H263 reframer: Filters/rfh263.md - - IVF/OBU/annexB rewriter: Filters/ufobu.md - - JPG/J2K/PNG/BMP reframer: Filters/rfimg.md - - LATM reframer: Filters/rflatm.md - - LATM rewriter: Filters/uflatm.md - - M1V/M2V/M4V reframer: Filters/rfmpgvid.md - - M4V rewriter: Filters/ufm4v.md - - MHAS rewriter: Filters/ufmhas.md - - MP3 reframer: Filters/rfmp3.md - - MPEH-H Audio Stream reframer: Filters/rfmhas.md - - PCM reframer: Filters/rfpcm.md - - ProRes reframer: Filters/rfprores.md - - QCP reframer: Filters/rfqcp.md - - QCP writer: Filters/writeqcp.md - - RAW video reframer: Filters/rfrawvid.md - - SRT reframer: Filters/rfsrt.md - - TX3G rewriter: Filters/ufttxt.md - - TrueHD reframer: Filters/rftruehd.md - - VC1 rewriter: Filters/ufvc1.md - - WebVTT rewriter: Filters/ufvtt.md - - Demultiplexers: - - AVI: Filters/avidmx.md - - FFmpeg: Filters/ffdmx.md - - GHI: Filters/ghidmx.md - - GSF: Filters/gsfdmx.md - - ISOBMFF/QT: Filters/mp4dmx.md - - MPEG PS: Filters/m2psdmx.md - - MPEG-2 TS: Filters/m2tsdmx.md - - OGG: Filters/oggdmx.md - - SAF: Filters/safdmx.md - - VobSub: Filters/vobsubdmx.md - - Mulitplexers: - - AVI: Filters/avimx.md - - FFmpeg: Filters/ffmx.md - - GSF: Filters/gsfmx.md - - ISOBMFF/QT: Filters/mp4mx.md - - MPEG-2 TS: Filters/m2tsmx.md - - OGG: Filters/oggmx.md - - Decoders: - - A52: Filters/a52dec.md - - BT/XMT/X3D: Filters/btplay.md - - FAAD: Filters/faad.md - - FFmpeg: Filters/ffdec.md - - MAD: Filters/maddec.md - - MPEG-4 BIFS: Filters/bifsdec.md - - MPEG-4 LASeR: Filters/lsrdec.md - - MPEG-4 OD: Filters/odfdec.md - - MediaCodec: Filters/mcdec.md - - NVidia: Filters/nvdec.md - - OpenHEVC: Filters/ohevcdec.md - - OpenJPEG2000: Filters/j2kdec.md - - OpenSVC: Filters/osvcdec.md - - PNG/JPG: Filters/imgdec.md - - SCTE35: Filters/scte35dec.md - - SVG: Filters/svgplay.md - - TTML: Filters/ttmldec.md - - TTXT/TX3G: Filters/ttxtdec.md - - Theora: Filters/theoradec.md - - UNCV: Filters/uncvdec.md - - Vorbis: Filters/vorbisdec.md - - WebCodec: Filters/wcdec.md - - WebVTT: Filters/vttdec.md - - XVid: Filters/xviddec.md - - Encoders: - - FFmpeg: Filters/ffenc.md - - JPG: Filters/jpgenc.md - - PNG: Filters/pngenc.md - - WebCodec: Filters/wcenc.md + - Stream Manipulation: + - Audio/Video rewinder: Filters/rewind.md + - Bitstream metadata rewriter: Filters/bsrw.md + - FFmpeg bitstream filter: Filters/ffbsf.md + - HEVC Tile aggregator: Filters/tileagg.md + - HEVC Tile extractor: Filters/hevcsplit.md + - HEVC Tile merger: Filters/hevcmerge.md + - HEVC Tile splitter: Filters/tilesplit.md + - Layered bitstream aggregator: Filters/bsagg.md + - Layered bitstream splitter: Filters/bssplit.md + - MPEG-2 TS splitter: Filters/tssplit.md + - MPEG-2 TS timestamper: Filters/tsgendts.md + - Media reframer: Filters/reframer.md + - SEI message loader: Filters/seiload.md + - Sources concatenator: Filters/flist.md + - Timestamp rewriter: Filters/restamp.md + - Multimedia I/O: + - AV Counter Generator: Filters/avgen.md + - Audio output: Filters/aout.md + - DVB for Linux: Filters/dvbin.md + - DekTec SDI output: Filters/dtout.md + - FFmpeg AV capture: Filters/ffavin.md + - Text Generator: Filters/txtgen.md + - Uncompressed Video Generator: Filters/uncvg.md + - Video output: Filters/vout.md + - Web-based AV capture: Filters/webgrab.md + - Protocols I/O: + - DASH & HLS client: Filters/dashin.md + - DASH & HLS segmenter: Filters/dasher.md + - File input: Filters/fin.md + - File output: Filters/fout.md + - HTTP input: Filters/httpin.md + - HTTP server: Filters/httpout.md + - MABR & ROUTE input: Filters/routein.md + - MABR & ROUTE output: Filters/routeout.md + - Media Server: Filters/mediaserver.md + - Pipe input: Filters/pin.md + - Pipe output: Filters/pout.md + - RTP Streamer: Filters/rtpout.md + - RTP/RTSP/SDP input: Filters/rtpin.md + - RTSP server: Filters/rtspout.md + - UDP/TCP input: Filters/sockin.md + - UDP/TCP output: Filters/sockout.md + - Text & Subtitles: + - Subtitle loader: Filters/txtin.md + - TTML sample merger: Filters/ttmlmerge.md + - TTML to SRT: Filters/ttml2srt.md + - TTML to WebVTT: Filters/ttml2vtt.md + - TX3G to SRT: Filters/tx3g2srt.md + - TX3G to TTML: Filters/tx3g2ttml.md + - TX3G to WebVTT: Filters/tx3g2vtt.md + - WebVTT to TX3G: Filters/vtt2tx3g.md + - Audio & Video Processing: + - Audio Video mixer: Filters/avmix.md + - Audio resampler: Filters/resample.md + - Compositor: Filters/compositor.md + - EVG video rescaler: Filters/evgs.md + - FFmpeg AV Filter: Filters/ffavf.md + - FFmpeg video rescaler: Filters/ffsws.md + - GPU texture uploader: Filters/glpush.md + - Thumbnail generator: Filters/thumbs.md + - Video cropper: Filters/vcrop.md + - Video flipper: Filters/vflip.md + - Utilities & Tools: + - JavaScript filter: Filters/jsf.md + - NHML reader: Filters/nhmlr.md + - NHML writer: Filters/nhmlw.md + - NHNT reader: Filters/nhntr.md + - NHNT writer: Filters/nhntw.md + - Packet inspector: Filters/inspect.md + - Source prober: Filters/probe.md + - Stream rewriter: Filters/unframer.md + - Stream to File converter: Filters/writegen.md + - Cryptography: + - CENC decryptor: Filters/cdcrypt.md + - CENC encryptor: Filters/cecrypt.md + - CryptFile input: Filters/cryptin.md + - CryptFile output: Filters/cryptout.md + - Bitstream Framing: + - AC3 reframer: Filters/rfac3.md + - AC4 reframer: Filters/rfac4.md + - AC4 writer: Filters/ufac4.md + - ADTS reframer: Filters/rfadts.md + - ADTS rewriter: Filters/ufadts.md + - AMR/EVRC reframer: Filters/rfamr.md + - AV1/IVF/VP9/IAMF reframer: Filters/rfav1.md + - AVC/HEVC reframer: Filters/rfnalu.md + - AVC/HEVC to AnnexB rewriter: Filters/ufnalu.md + - FLAC reframer: Filters/rfflac.md + - Framed to Unframed converter: Filters/writeuf.md + - H263 reframer: Filters/rfh263.md + - IVF/OBU/annexB rewriter: Filters/ufobu.md + - JPG/J2K/PNG/BMP reframer: Filters/rfimg.md + - LATM reframer: Filters/rflatm.md + - LATM rewriter: Filters/uflatm.md + - M1V/M2V/M4V reframer: Filters/rfmpgvid.md + - M4V rewriter: Filters/ufm4v.md + - MHAS rewriter: Filters/ufmhas.md + - MP3 reframer: Filters/rfmp3.md + - MPEH-H Audio Stream reframer: Filters/rfmhas.md + - PCM reframer: Filters/rfpcm.md + - ProRes reframer: Filters/rfprores.md + - QCP reframer: Filters/rfqcp.md + - QCP writer: Filters/writeqcp.md + - RAW video reframer: Filters/rfrawvid.md + - SRT reframer: Filters/rfsrt.md + - TX3G rewriter: Filters/ufttxt.md + - TrueHD reframer: Filters/rftruehd.md + - VC1 rewriter: Filters/ufvc1.md + - WebVTT rewriter: Filters/ufvtt.md + - Demultiplexers: + - AVI: Filters/avidmx.md + - FFmpeg: Filters/ffdmx.md + - GHI: Filters/ghidmx.md + - GSF: Filters/gsfdmx.md + - ISOBMFF/QT: Filters/mp4dmx.md + - MPEG PS: Filters/m2psdmx.md + - MPEG-2 TS: Filters/m2tsdmx.md + - OGG: Filters/oggdmx.md + - SAF: Filters/safdmx.md + - VobSub: Filters/vobsubdmx.md + - Mulitplexers: + - AVI: Filters/avimx.md + - FFmpeg: Filters/ffmx.md + - GSF: Filters/gsfmx.md + - ISOBMFF/QT: Filters/mp4mx.md + - MPEG-2 TS: Filters/m2tsmx.md + - OGG: Filters/oggmx.md + - Decoders: + - A52: Filters/a52dec.md + - BT/XMT/X3D: Filters/btplay.md + - FAAD: Filters/faad.md + - FFmpeg: Filters/ffdec.md + - MAD: Filters/maddec.md + - MPEG-4 BIFS: Filters/bifsdec.md + - MPEG-4 LASeR: Filters/lsrdec.md + - MPEG-4 OD: Filters/odfdec.md + - MediaCodec: Filters/mcdec.md + - NVidia: Filters/nvdec.md + - OpenHEVC: Filters/ohevcdec.md + - OpenJPEG2000: Filters/j2kdec.md + - OpenSVC: Filters/osvcdec.md + - PNG/JPG: Filters/imgdec.md + - SCTE35: Filters/scte35dec.md + - SVG: Filters/svgplay.md + - TTML: Filters/ttmldec.md + - TTXT/TX3G: Filters/ttxtdec.md + - Theora: Filters/theoradec.md + - UNCV: Filters/uncvdec.md + - Vorbis: Filters/vorbisdec.md + - WebCodec: Filters/wcdec.md + - WebVTT: Filters/vttdec.md + - XVid: Filters/xviddec.md + - Encoders: + - FFmpeg: Filters/ffenc.md + - JPG: Filters/jpgenc.md + - PNG: Filters/pngenc.md + - WebCodec: Filters/wcenc.md - Build: - Overview: Build/Build-Introduction.md - Upgrading or Changing Branch: Build/Upgrading.md From 1dd2188fe84909510ac13fb1a11e04d9c6a3dd52 Mon Sep 17 00:00:00 2001 From: Romain Bouqueau Date: Fri, 7 Aug 2026 15:59:19 -0400 Subject: [PATCH 2/4] add DRM page --- .../encryption-commercial-DRMs-CPIX.md | 177 ++++++++++++++++++ 1 file changed, 177 insertions(+) diff --git a/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md b/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md index e69de29b..ce267004 100644 --- a/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md +++ b/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md @@ -0,0 +1,177 @@ +--- +tags: +- option +- mp4 +- encrypt +- mpd +- source +- pid +- input +- media +- manifest +- isomedia +- data +- isobmff +- xml +- property +- dash +--- + + +# Overview {:data-level="all"} + +We discuss here how to use commercial DRMs with GPAC. We assume that you are familiar with encrypting ISOBMFF files with GPAC. If not, please read the [Encryption](Encryption-Introduction page) first. + +GPAC provides a generic framework for protecting data with encryption. As Free Software, GPAC's community is more inclined towards privacy. However we need [your inputs](https://github.com/gpac/wiki/issues/new?template=bug_report.md) to support commercial DRMs too. + +# DRM config file {:data-level="beginner"} + +## Introduction + +For historical reasons, commercial DRMs require some custom processing and fields, often centralized in the `pssh` box or thr MPEG-DASH MPD manifest, but not only. GPAC tries an automatic detection or relies on user-based input such as a [DRM config file](Common-Encryption). + +## PSSH box localisation + +With adapting streaming (`dasher` filter), the `pssh` box can be set both inband (in the global `moov` or the fragment `moof`) or outband (in the manifest). Most DRMs mandate both (`dasher:pssh=mv`). + +## Specifying right management servers + +### License Acquisition + +If you need to specify a License Acquisition server URL ("LAURL"), use the [dasher](dasher) filter `laurl` parameter. + +If all streams share the same LAURL, specify `laurl` like this: + + ``` + MP4Box -dash 1000 cypted.mp4 -out dash/manifest.mpd:laurl=https://drm.com/GetLicence + ``` + + +If each source has its own licence URL: + ``` + MP4Box -dash 1000 cypted.mp4:#LAUrl=https://ck.gpac.io/GetLicence1 cypted2.mp4:#LAUrl=https://ck.gpac.io/GetLicence2 -out dash/manifest.mpd + ``` + +### Certificate information + +If you need to specify a server to get certificate information("CertURL"), use the [dasher](dasher) filter `certurl` parameter. This is for instance needed with Apple FairPlay. + +If all streams share the same URL, specify `certurl` like this: + + ``` + MP4Box -dash 1000 cypted.mp4 -out dash/manifest.mpd:cerurl=https://drm.com/cert.cer + ``` + +If each source has its own licence URL: + ``` + MP4Box -dash 1000 cypted.mp4:#CertUrl=https://ck.gpac.io/cert1.cer cypted2.mp4:#CertUrl=https://ck.gpac.io/cert2.cer -out dash/manifest.mpd + ``` + +## Mapping the DRM-vendor information with + +Most vendors will provide you some mapping with GPAC. If they don't, they will likely provide you with standard information such as a `PSSH` ISOBMFF box. Not that GPAC write the box for you so you need to remove the header from the DRM PSSH manually by removing the first 48 bytes: + - The 8 first bytes which represent the box header. + - The next 32 bytes corresponds to the System Id (=a DRM unique identifier). + - The next 8 bytes encode the size of the following payload. + +GPAC XML format supports many binary [formats](https://wiki.gpac.io/xmlformats/XML-Binary/#semantics). However one may still need to accomplish manual conversions depending on the data provided by the DRM vendor. + +## PlayReady DRM + +The DRM config file ([syntax](https://wiki.gpac.io/xmlformats/Common-Encryption/)) for PlayReady looks like (replace the three dots by your DRM vendor information - more on that above): + +``` + + + + + + + + + + + + + + +``` + +Some [examples](https://github.com/search?q=repo%3Agpac%2Ftestsuite%20playready&type=code) were contributed to the GPAC's testsuite too. + +## Widevine DRM + +The DRM config file ([syntax](https://wiki.gpac.io/xmlformats/Common-Encryption/)) for Widevine looks like (replace the three dots by your DRM vendor information - more on that above): + +``` + + + + + + + + + + + + + + +``` + +## FairPlay DRM + +The DRM config file ([syntax](https://wiki.gpac.io/xmlformats/Common-Encryption/)) for FairPlay looks like (replace the three dots by your DRM vendor information - more on that above): + +``` + + + + + + + + + + + + + +``` + +## Other DRMs + +All DRMs work similarly. In case of doubt, contact us. + +## Combining multiple DRMs + +Combining DRMs consist in stacking options. Make sure the encryption parameters are compatible among DRMs. The DRM config file contains several `PSSH` box descriptions: + +``` + + + + + + + + + + + + + + + + + + + + + + + + + +``` From 7139711b0cd42a79720485f75ec9996735dbf93a Mon Sep 17 00:00:00 2001 From: Romain Bouqueau Date: Fri, 7 Aug 2026 18:51:55 -0400 Subject: [PATCH 3/4] add command-lines --- .../encryption-commercial-DRMs-CPIX.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md b/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md index ce267004..6cab0c08 100644 --- a/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md +++ b/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md @@ -97,6 +97,12 @@ The DRM config file ([syntax](https://wiki.gpac.io/xmlformats/Common-Encryption/ ``` +A corresponding PlayReady command-line is: + +``` +gpac -i input.mp4 cecrypt:cfile=playready.xml -o output/dash.mpd:pssh=mv:laurl=(playready)https://drm.com/auth?p=my_id +``` + Some [examples](https://github.com/search?q=repo%3Agpac%2Ftestsuite%20playready&type=code) were contributed to the GPAC's testsuite too. ## Widevine DRM @@ -120,6 +126,12 @@ The DRM config file ([syntax](https://wiki.gpac.io/xmlformats/Common-Encryption/ ``` +A corresponding Widevine command-line is: + +``` +gpac -i input.mp4 cecrypt:cfile=../widevine.xml -o output/dash.mpd:pssh=mv:laurl=(widevine)https://drm.com/proxy?p=my_id +``` + ## FairPlay DRM The DRM config file ([syntax](https://wiki.gpac.io/xmlformats/Common-Encryption/)) for FairPlay looks like (replace the three dots by your DRM vendor information - more on that above): @@ -140,6 +152,12 @@ The DRM config file ([syntax](https://wiki.gpac.io/xmlformats/Common-Encryption/ ``` +A corresponding FairPlay command-line is: + +``` +gpac -i input.mp4 cecrypt:cfile=fairplay.xml -o output/dash.mpd:pssh=mv:laurl=(fairplay)https://drm.com/auth?p=my_id&assetID=01234567-8901-2345-6789-012345678901:certurl=https://drm.com/cert.cer +``` + ## Other DRMs All DRMs work similarly. In case of doubt, contact us. @@ -175,3 +193,9 @@ Combining DRMs consist in stacking options. Make sure the encryption parameters ``` + +A corresponding multi-DRM command-line is: + +``` +gpac -i input.mp4 cecrypt:cfile=../widevine.xml -o output/dash.mpd:pssh=mv:laurl=(widevine)https://drm.com/proxy?p=my_id,(widevine)https://drm.com/proxy?p=my_id,(fairplay)https://drm.com/auth?p=my_id&assetID=01234567-8901-2345-6789-012345678901:certurl=https://drm.com/cert.cer +``` From b3e71ffc95cf896c67247c247b2c4738c0152e11 Mon Sep 17 00:00:00 2001 From: Romain Bouqueau Date: Fri, 4 Sep 2026 15:17:39 -0400 Subject: [PATCH 4/4] add cpix example --- docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md b/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md index 6cab0c08..702f0ddc 100644 --- a/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md +++ b/docs/Howtos/encryption/encryption-commercial-DRMs-CPIX.md @@ -199,3 +199,11 @@ A corresponding multi-DRM command-line is: ``` gpac -i input.mp4 cecrypt:cfile=../widevine.xml -o output/dash.mpd:pssh=mv:laurl=(widevine)https://drm.com/proxy?p=my_id,(widevine)https://drm.com/proxy?p=my_id,(fairplay)https://drm.com/auth?p=my_id&assetID=01234567-8901-2345-6789-012345678901:certurl=https://drm.com/cert.cer ``` + +# Using CPIX + +[CPIX](https://dashif.org/CPIX/) is a document format for DRM information exchange. GPAC offers to parse CPIX documents. If the current parsing is too limited for your needs, please contact our [open-source](https://github.com/gpac/gpac/issues/new) or [commercial teams](mailto:romain.bouqueau@motionspell.com). + +``` +gpac -i input.mp4 cecrypt:cfile=cpix.xml:laurl=... -o output/dash.mpd:pssh=mv" +```