6

Google Shaka プレーヤー用のサンプル H.264ファイルをトランスコードして DASH (クリア キー暗号化を使用) しようとしています。オンラインでつなぎ合わせることができた一連の手順はすべて、暗号化されていない場合はプレイ可能なバージョンになり、暗号化を重ねようとすると失敗します.

暗号化されていない

暗号化されていないバージョンを動作させるために私が従う手順は次のとおりです。

  1. ビデオとオーディオを分離する

    ffmpeg -i input.mp4 -an -c copy video_only.mp4
    ffmpeg -i input.mp4 -map 0:2 -c copy audio_only.m4a
    
  2. 動画を機能するバリアントにトランスコードします (現時点では 1 つだけ)

    ffmpeg -i video_only.mp4 -an -vcodec libx264 -s 1280x720 -c:v libx264 -b:v 384k -bf 2 -g 90 -sc_threshold 0 -an -strict experimental video_only_384kbps.mp4
    

3a. MPD を作成する

    MP4Box -dash 5000 -segment-name 'outputseg-%s' -url-template -bs-switching no \
        -out output.mpd -rap \
        audio_only.m4a \
        video_only_384kbps.mp4

4a. ビデオを Osmo4 または Google Shaka にロードして再生します。

暗号化あり

今、私は暗号化を重ねようとしています。上記のステップ 2 の後から開始します。

3b. バリアントを Clear Key で暗号化する

    MP4Box -crypt drm.xml audio_only.m4a -out audio_only_encrypted.m4a
    MP4Box -crypt drm.xml video_only_384kbps.mp4 -out video_only_384kbps_encrypted.mp4

drm.xml には、 MP4Box/GPAC サイトから直接派生したサンプルが含まれています。

    <?xml version="1.0" encoding="UTF-8"?>
    <GPACDRM type="CENC AES-CTR">
      <!-- example for GPAC - keys are listed after the content and UL follows -->
      <DRMInfo cypherIV="0x00000000000000000000000000000001" cypherKey="0x6770616363656E6364726D746F6F6C31" cypherOffset="9" type="pssh" version="1">
        <BS ID128="6770616363656E6364726D746F6F6C31"/>
        <BS bits="32" value="2"/>
        <BS ID128="0x279926496a7f5d25da69f2b3b2799a7f"/>
        <BS ID128="0x676cb88f302d10227992649885984045"/>
        <BS bits="8" string="CID=Toto"/>
        <BS ID128="0xccc0f2b3b279926496a7f5d25da692f6"/>
        <BS ID128="0xccc0f2b3b279926496a7f5d25da692d6"/>
      </DRMInfo>
      <CrypTrack IV_size="16" IsEncrypted="1" first_IV="0x0a610676cb88f302d10ac8bc66e039ed" saiSavedBox="senc" trackID="1">
        <key KID="0x279926496a7f5d25da69f2b3b2799a7f" value="0xccc0f2b3b279926496a7f5d25da692f6"/>
      </CrypTrack>
    </GPACDRM>

4b. MPD を作成する

MP4Box -dash 5000 -segment-name 'outputseg-%s' -url-template -bs-switching no \
    -out output.mpd -rap \
    audio_only_encrypted.m4a \
    video_only_384kbps_encrypted.mp4

5b. 動画を Osmo4 または Google Shaka に読み込みます。* Osmo4 では、エラーは検出されませんが、プレイヤーは強制終了するまでハングします * Google Shaka では、次のようなプレイヤー エラーを常に受け​​取ります: "CustomEvent {detail: Error: No DrmInfo exists! at shaka.media.EmeManager.buildKeySystemQueries_ ( http ://localhost:808 …, srcElement: null, ターゲット: s…ap…r.Player, currentTarget: s…ap…r.Player}

5b 後の output.mpd は次のようになります。

    <?xml version="1.0"?>
    <!-- MPD file Generated with GPAC version 0.5.2-DEV-rev566-g4c06d0f-master  at 2015-09-03T19:17:57.544Z-->
    <MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500S" type="static" mediaPresentationDuration="PT0H0M54.424S" maxSegmentDuration="PT0H0M4.992S" profiles="urn:mpeg:dash:profile:full:2011" xmlns:cenc="urn:mpeg:cenc:2013">
     <ProgramInformation moreInformationURL="http://gpac.sourceforge.net">
      <Title>output.mpd generated by GPAC</Title>
     </ProgramInformation>

     <Period duration="PT0H0M54.424S">
      <AdaptationSet segmentAlignment="true" lang="eng">
       <Representation id="1" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="140631">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
        <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="27992649-6a7f-5d25-da69-f2b3b2799a7f"/>
        <SegmentTemplate timescale="48000" media="outputseg-audio_only_encrypted$Number$.m4s" startNumber="1" duration="239616" initialization="outputseg-audio_only_encryptedinit.mp4"/>
       </Representation>
      </AdaptationSet>
      <AdaptationSet segmentAlignment="true" maxWidth="1280" maxHeight="720" maxFrameRate="24" par="16:9" lang="eng">
       <Representation id="2" mimeType="video/mp4" codecs="avc1.64001f" width="1280" height="720" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="375052">
        <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="27992649-6a7f-5d25-da69-f2b3b2799a7f"/>
        <SegmentTemplate timescale="12288" media="outputseg-video_only_384kbps_encrypted$Number$.m4s" startNumber="1" duration="46080" initialization="outputseg-video_only_384kbps_encryptedinit.mp4"/>
       </Representation>
      </AdaptationSet>
     </Period>
    </MPD>

ソフトウェアのバージョン:

  • MP4Box: GPAC バージョン 0.5.2-DEV-rev566-g4c06d0f-master
  • FFMPEG: ffmpeg バージョン 2.6.3 Copyright (c) 2000-2015 Apple LLVM バージョン 6.1.0 (clang-602.0.53) で構築された FFmpeg 開発者 (LLVM 3.6.0svn に基づく)

続行する方法について何か提案はありますか?

4

0 に答える 0