Skip to content

Instantly share code, notes, and snippets.

View TakuSemba's full-sized avatar

TakuSemba TakuSemba

View GitHub Profile
packager \
in=sample.mp4,stream=audio,output=audio.mp4 \
in=sample.mp4,stream=video,output=video.mp4 \
--mpd_output sample.mpd \
--enable_widevine_encryption \
--key_server_url https://license.uat.widevine.com/cenc/getcontentkey/widevine_test \
--content_id 7465737420636f6e74656e74206964 \
--signer widevine_test \
--aes_signing_key 1ae8ccd0e7985cc0b6203a55855a1034afc252980e970ca90e5202689f947ab9 \
--aes_signing_iv d58ce954203b7c9a9a9d467f59839249
<?xml version="1.0" encoding="utf-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:ttp="http://www.w3.org/ns/ttml#parameter" xmlns:tts="http://www.w3.org/ns/ttml#styling" xmlns:ttm="http://www.w3.org/ns/ttml#metadata" ttp:timeBase="media" ttp:frameRate="24" xml:lang="en">
<head>
<metadata>
<ttm:title>Sample TTML</ttm:title>
</metadata>
<styling>
<style xml:id="s1" tts:textAlign="center" tts:fontFamily="Arial" tts:fontSize="100%"/>
</styling>
<layout>
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="abba271e-8bcf-552b-bd2e-86a434a9a5d9"/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
<cenc:pssh>AAAAN3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABciD3Rlc3QgY29udGVudCBpZEjj3JWbBg==</cenc:pssh>
</ContentProtection>
#EXTM3U
#EXT-X-VERSION:6
## Generated with https://github.com/google/shaka-packager version 2453c93f91-release
#EXT-X-TARGETDURATION:12
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="h264_720p.mp4",BYTERANGE="1091@0"
#EXT-X-KEY:METHOD=SAMPLE-AES-CTR,URI="data:text/plain;base64,AAAAN3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABciD3Rlc3QgY29udGVudCBpZEjj3JWbBg==",KEYID=0x6D76F25CB17F5E16B8EAEF6BBF582D8E,KEYFORMATVERSIONS="1",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
Seek Parameters Description
EXACT(default) seek to the closest frame.
CLOSEST_SYNC seek to the closest sync point.
PREVIOUS_SYNC seek to the closest previous sync point.
NEXT_SYNC seek to the closest next sync point.
public final class Case2MediaDrmCallback implements MediaDrmCallback {
private final byte[] videoKeyResponse;
private final byte[] audioKeyResponse;
public DemoMediaDrmCallback() {
videoKeyResponse =
"{\"keys\":[{\"kty\":\"oct\",\"k\":\"7s2ytUnwKnyXzlDBf0lMoA\",\"kid\":\"x3/uNeUf1hWnuRr8sQkcXg\"}],\"type\":\"temporary\"}"
.getBytes();
audioKeyResponse =
public final class Case1MediaDrmCallback implements MediaDrmCallback {
private final byte[] keyResponse;
public DemoMediaDrmCallback() {
keyResponse = "{\"keys\":[{\"kty\":\"oct\",\"k\":\"7s2ytUnwKnyXzlDBf0lMoA\",\"kid\":\"x3/uNeUf1hWnuRr8sQkcXg\"}, {\"kty\":\"oct\",\"k\":\"mrt6tsxK07hsIZPa2x54bA\",\"kid\":\"BF9+zDWEjtezwBLqdhRCLw\"}],\"type\":\"temporary\"}".getBytes()
}
@Override public byte[] executeProvisionRequest(UUID uuid, ExoMediaDrm.ProvisionRequest request)
throws IOException {
public final class SampleMediaDrmCallback implements MediaDrmCallback {
private final byte[] keyResponse = "...";
@Override public byte[] executeProvisionRequest(UUID uuid, ExoMediaDrm.ProvisionRequest request)
throws IOException {
throw new UnsupportedOperationException();
}
@Override public byte[] executeKeyRequest(UUID uuid, ExoMediaDrm.KeyRequest request)
<?xml version="1.0" ?>
<MPD mediaPresentationDuration="PT2M5.933S" minBufferTime="PT4.94S" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" xmlns="urn:mpeg:dash:schema:mpd:2011">
<!-- Created with Bento4 mp4-dash.py, VERSION=1.8.0-628 -->
<Period>
<!-- Video -->
<AdaptationSet maxHeight="240" maxWidth="320" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1">
<ContentProtection cenc:default_KID="c77fee35-e51f-d615-a7b9-1afcb1091c5e" schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc"/>
<SegmentTemplate initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4s" startNumber="1" timescale="15360">
<SegmentTimeline>
<S d="129024"/>
@TakuSemba
TakuSemba / sample.kt
Created January 28, 2019 02:33
test kotlin
fun getHelloString() : String {
return "Hello, world!"
}
fun main(args : Array<String>) {
println(getHelloString())
}