0

ts ファイルのリストを含む m3u8 ファイルの URL があります。これらのファイルはすべて AES-128 方式で暗号化されています。ts ファイルとともに、m3u8 ファイルにはキーの URI も含まれています。

まず、tsファイルをダウンロードしてから復号化したい.復号化した後、それらのファイルを再生したい.

私のm3u8ファイルのURLは次のようなものですhttps://example.com/myxml/myclips/250/prog_index.m3u8

私のm3u8ファイルは次のようになります。

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:2
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10, 
#EXT-X-KEY:METHOD=AES-128,URI="https://my.server.com/myxml/myclips/keys/250/crypt_480x272_250_0.key",IV=0x8da4a2d80b88785f7931874bf1e0914b
fileSequence0.ts
#EXTINF:10, 
fileSequence1.ts
#EXTINF:10, 
fileSequence2.ts
#EXTINF:10, 
fileSequence3.ts
#EXTINF:10, 
fileSequence4.ts
#EXTINF:10, 
fileSequence5.ts
#EXTINF:10, 
fileSequence6.ts
#EXTINF:10, 
fileSequence7.ts
#EXTINF:10, 
fileSequence8.ts
#EXTINF:10, 
fileSequence9.ts
#EXTINF:10, 
fileSequence10.ts
#EXTINF:10, 
fileSequence11.ts
#EXTINF:10, 
#EXT-X-KEY:METHOD=AES-128,URI="https://my.server.com/myxml/myclips/keys/250/crypt_480x272_250_1.key",IV=0x8e2d35559338d21f2586e79d6cd5c606
fileSequence12.ts
#EXTINF:10, 
fileSequence13.ts
#EXTINF:10, 
fileSequence14.ts
#EXTINF:10, 
fileSequence15.ts
#EXTINF:10, 
fileSequence16.ts
#EXTINF:10, 
fileSequence17.ts
#EXTINF:10, 
fileSequence18.ts
#EXTINF:10, 
fileSequence19.ts
#EXTINF:2,  
fileSequence20.ts
#EXT-X-ENDLIST

これを行う方法がわかりません。助けてください。

4

2 に答える 2

1

私のコメントで述べたように、AES-128の復号化は、メディアフレームワークによってAndroid3.xおよび4.xデバイスで自動的に行われます。

ただし、m3u8に間違いがあります。#EXTINFと#EXT-X-KEYの順序を逆にしてください。#EXTINFは、次の行にTSURIを含める必要があります。

HLSドラフトからの引用の下

EXTINFは、後続のURIによって識別されるメディアファイルを説明するレコードマーカーです。各メディアファイルURIの前には、EXTINFタグを付ける必要があります。

于 2013-01-09T12:47:13.090 に答える
0

少し前まではほぼ同じでした。私はそれについてここに書きました: https://andreasvolkmann.github.io//m3u8-and-ts-segments/

基本的に、暗号化された ts セグメントを含む m3u8 プレイリストを取得し、それを 1 つの mp3 ファイルに変換します。

ただし、私は Android を使用していません。次のコードは私にとってはうまくいきました(Kotlin):

fun getCipher(data: EncryptionData): Cipher {
    val bytes = URL(data.uri).readBytes()
    val chainmode = "CBC"
    val method = when (data.method) {
        EncryptionMethod.AES -> "AES/$chainmode/NoPadding"
        else -> data.method.name
    }
    val keySpec = SecretKeySpec(bytes, data.method.name)
    logger.trace("Decrypting using method ${data.method} ($method)")
    return Cipher
        .getInstance(method)
        .apply { init(Cipher.DECRYPT_MODE, keySpec, IvParameterSpec(ByteArray(16))) }
}
于 2018-06-07T15:46:17.490 に答える