Воспроизведение мультимедиа в JSPX ADF? - PullRequest
0 голосов
/ 07 ноября 2018

Уважаемые,

Я пытался заставить страницу ADF воспроизводить аудиофайлы, хранящиеся на сервере с расширением "wav", столкнулся с проблемой, которая возникает при использовании <af:media>

по ссылке детали / Инструкции:

https://docs.oracle.com/cd/E24001_01/apirefs.1111/e12419/tagdoc/af_media.html

результат пока, мне удалось получить путь, используя управляемый компонент. Я предоставил его в качестве источника, используя область потока страниц.

<af:media source="#{pageFlowScope.filePath}" standbyText="Play Recording" id="m3"/>

filePath будет выглядеть так: /recording/2018/11/07/test.wav

но результат на Chrome такой:

enter image description here

вот проверенный элемент:

<embed width="275" height="40" name="pt1:pc1:m3" type="application/x-mplayer2" pluginspage="http://www.microsoft.com/Windows/MediaPlayer/" autostart="0" src="/TestWebApp-ViewController-context-root/recording/2018/11/07/test.wav">

так что мне интересно, кто-то пробовал это раньше

С уважением,

1 Ответ

0 голосов
/ 08 ноября 2018

Мне удалось решить проблему с помощью аудио html5, и управляемый компонент предоставляет файл в base64 с помощью библиотеки общих кодеков

 private String encodeFileToBase64Binary(String fileName)
                            throws IOException {

            File file = new File(convert(fileName));
            byte[] bytes = loadFile(file);
            byte[] encoded = Base64.encodeBase64(bytes);
            String encodedString = new String(encoded);

            return "data:audio/mpeg;base64,"+encodedString;
    }

    private static byte[] loadFile(File file) throws IOException {
        InputStream is = new FileInputStream(file);

        long length = file.length();
        if (length > Integer.MAX_VALUE) {
            // File is too large
        }
        byte[] bytes = new byte[(int)length];

        int offset = 0;
        int numRead = 0;
        while (offset < bytes.length
               && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
            offset += numRead;
        }

        if (offset < bytes.length) {
            throw new IOException("Could not completely read file "+file.getName());
        }

        is.close();
        return bytes;
    }

и я вызвал вышеуказанный метод с указанием пути и сохранил его в pageFlowScope

JSPX часть:

<audio src="${pageFlowScope.filePath}" controls="controls" controlsList="nodownload"></audio>

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...