Я работаю над Wowza Streaming Server и, пытаясь защитить Apple HTTP Live Streaming с помощью внешнего метода AES-128, сталкиваюсь со следующими проблемами:
- Внешний метод шифрования AES-128 не работает для файлов .smil, находящихся в подпапке исходного каталога приложения. Я попытался добиться этого, поместив [my-stream].key в [install-dir]/keys и [install-dir]/keys/[sub-folder-name], но оба сценария не помогли мне добиться этого.
URL-адрес плейлиста: - [wowza-server-ip]:[порт]/[имя-приложения]/[имя-экземпляра-приложения]/smil:[подпапка]/demo.smil/playlist.m3u8
- Если в исходном пути приложения присутствуют файлы mp4, проигрыватель не вызывает URL-адрес ключа.
Последовательность звонков, сделанных игроком: -
- [wowza-server-ip]:[порт]/crossdomain.xml
- [wowza-server-ip]:[порт]/[имя-приложения]/[имя-экземпляра-приложения]/[имя-потока]/playlist.m3u8
- [wowza-ip-сервера]:[порт]/[имя-приложения]/[имя-экземпляра-приложения]/[имя-потока]/chunklist_w[идентификатор-сеанса-wowza].m3u8
- [веб-сервер-ip]:[порт]/crossdomain.xml
После этого игрок не вызывает «ури запроса ключа», как это должно было вызываться. Звонки проходят правильно, когда я использую внутренний метод шифрования AES-128.
Мой chunklist_w[wowza-session-id].m3u8:
#EXTM3U
#EXT-X-ВЕРСИЯ:3
#EXT-X-ЦЕЛЕВАЯ ПРОДОЛЖИТЕЛЬНОСТЬ:12
#EXT-X-МЕДИА-ПОСЛЕДОВАТЕЛЬНОСТЬ:0
#EXT-X-KEY:METHOD=AES-128,URI="http://[веб-сервер-ip]:[порт]/SimpleWebServlet/key.jsp?wowzasessionid=[идентификатор сеанса]"
#EXTINF:9.52,
media_w[идентификатор сеанса]_0.ts
#EXTINF:10.4,
media_w[идентификатор сеанса]_1.ts
[streamname].key в папке [install-dir]/keys
Купертиностриминг-aes128-ключ: DE51A7254739C0EDF1DCE13BBB308FF0
cupertinostreaming-aes128-url: http://[web-server-ip]:[port]/SimpleWebServlet/key.jsp
jsp для возврата ключа — это key.jsp
<%@ page import="java.util.*,java.io.*" %>
<%
boolean isValid = true;
if (!isValid)
{
response.setStatus( 403 );
}
else
{
response.setHeader("Content-Type", "binary/octet-stream");
response.setHeader("Pragma", "no-cache");
String keyStr = "DE51A7254739C0EDF1DCE13BBB308FF0";
int len = keyStr.length()/2;
byte[] keyBuffer = new byte[len];
for (int i=0;i<len;i++)
keyBuffer[i] = (byte)Integer.parseInt(keyStr.substring(i*2, (i*2)+2), 16);
OutputStream outs = response.getOutputStream();
outs.write(keyBuffer);
outs.flush();
}
%>
Если кто-то сталкивался с подобной проблемой или успешно реализовал внешний метод wowza aes-128, пожалуйста, проясните проблемы, упомянутые выше.
ИЗМЕНИТЬ 1
Пожалуйста, проигнорируйте 2-й пункт, так как после дальнейшего анализа я обнаружил, что есть проблема с доставкой ключа jboss после того, как он доставляет междоменный xml игроку.
Чтобы узнать об этой проблеме, пожалуйста, проверьте: -player">Могу ли я вызвать два файла crossdomain.xml с двух разных серверов из своего флеш-плеера?
ИЗМЕНИТЬ 2
Извиняюсь за опечатку в первом пункте. Это должен быть .smil, а не .mp4, я исправил то же самое в своем первом пункте