2013-08-02 1 views
0

Используя ключ Chromecast, мы пытаемся показать растровое изображение, созданное с помощью андроида, часто меняющегося на ресивере. То, как мы сейчас это делаем, - это преобразование изображения в Base64, а затем отправку его в качестве URL-адреса. Это работает, но очень медленно и кажется неэффективным. Каким будет лучший способ показать локальный Bitmap на ресивере?Chromecast отправки растрового изображения на приемник

Соответствующий код Java:

Bitmap bitmap1 = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
bitmap1.compress(CompressFormat.JPEG, 85, baos); 
String image = "data:image/jpeg;base64,"+Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); 
mMessageStream.loadMedia(image, mMetaData, true); 

receiver.html:

<html> 
<script src="https://www.gstatic.com/cast/js/receiver/1.0/cast_receiver.js"> 
</script> 
<script type="text/javascript"> 

    var receiver = new cast.receiver.Receiver(
     'ACTUAL_APP_ID_HERE', [cast.receiver.RemoteMedia.NAMESPACE], 
     "", 
     3); 
    var remoteMedia = new cast.receiver.RemoteMedia(); 
    remoteMedia.addChannelFactory(
     receiver.createChannelFactory(cast.receiver.RemoteMedia.NAMESPACE)); 

    receiver.start(); 

    window.addEventListener('load', function() { 
     var elem = document.getElementById('vid'); 
     remoteMedia.setMediaElement(elem); 
    }); 
</script> 

<body> 
<img id="vid" style="position:absolute;top:0;left:0;height:100%;width:100%" /> 
</body> 
</html> 

ответ

1

Это, вероятно, не самый лучший метод, но у меня есть приложение, которое запускает локальный веб-сервер и отправляет правильную ссылку на приемник. По запросу http сервер затем передает файл с диска. Я не тестировал, как быстро/часто его можно изменить.

+0

Было бы интересно проверить, если это имеет значение (отправка Bitmap через соединение WebSockets, позволяя приемнику загружать его через HTTP). Запуск HTTP-сервера кажется, что он просто добавит некоторую косвенность потоку, я не могу представить, почему это было бы быстрее, чем просто передавать его по WebSockets, но опять же я не очень много знаю о внутренней работе протокола , –

0

Использование Base64OutputStream с другими потоками, прямо сейчас вы просто загружаются все изображение в памяти, которая очень плохо, и даст вам из-за ошибки памяти рано или поздно.

+0

Вы говорите, что у меня не хватит памяти на устройстве Android или на устройстве Chromecast? Мне нужно изображение в формате Bitmap на Android-устройстве, чтобы позже вставить ImageView. – user2647204

 Смежные вопросы

  • Нет связанных вопросов^_^