Wowza безопасный Apple HTTP Live Streaming (AES-128 - внешний метод). Игрок не делает запрос ключа
Я работал на 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-сервер IP]:[порт] файл /crossdomain.xml
- [Wowza-сервер IP]:[порт] / [Приложение-имя] / [-имя-экземпляр applcation] / [Поток-имя] /playlist.m3u8
- [Wowza-сервера IP]:[порт] / [Приложение-имя] / [-имя-экземпляра applcation] / [Поток-имя] / chunklist_w [Wowza-Session-Id].m3u8
- [Веб-сервер IP]:[порт] файл /crossdomain.xml
После этого игрок не вызывает "запрос ключа", как предполагалось. Звонки происходят правильно, когда я использую внутренний метод шифрования AES-128.
Мой chunklist_w[wowza-session-id].m3u8
# EXTM3U
# EXT-X-версия: 3
# EXT-X-TARGETDURATION: 12
# EXT-X-MEDIA-ПОСЛЕДОВАТЕЛЬНОСТИ: 0
# EXT-X-KEY: METHOD = AES-128, URI = "HTTP://[веб-сервера IP]:[порт]/SimpleWebServlet/key.jsp?wowzasessionid=[Session-Id]"
#EXTINF: 9,52,
media_w [Session-Id] _0.ts
#EXTINF: 10,4,
media_w [Session-Id]_1.ts
Файл [streamname].key в папке [install-dir]/keys
ключ cupertinostreaming-aes128: DE51A7254739C0EDF1DCE13BBB308FF0
cupertinostreaming-aes128-url: http://%5Bweb-server-ip%5D:%5Bport%5D/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 пользователю.
Для ссылки на эту проблему, пожалуйста, проверьте: Могу ли я вызвать два файла crossdomain.xml с двух разных серверов с моего флэш-плеера?
РЕДАКТИРОВАТЬ 2
Извиняюсь за опечатку в моем первом пункте. Это должно быть.smil, а не.mp4, я исправил то же самое в моем первом пункте
1 ответ
Я недавно опробовал HLS с AES128, и он работал нормально. Мой ключевой файл был в [wowzadir]/keys/mystream.key
, Похоже, это ваш игрок не делает что-то прямо здесь. Каким игроком вы пользуетесь?
Вы можете попробовать использовать wget
загрузить некоторые куски, и вы можете проверить их с помощью VLC, например, чтобы увидеть, было ли применено шифрование.