将 Base64 编码的图像作为字符串发送到 Chromecast

Send Base64 encoded image as string to Chromecast

问题是将来自 phone 的本地图像作为编码的 Base64 字符串发送到 Chromecast。并使用我的自定义接收器对其进行解码。我正在关注 this guide which is based on this project sample

我认为问题可能出在:

  1. 自定义Receiver不合适(本人JS不强)
  2. Chromecast 没有加载该 Receiver(我不知道如何检查)。
  3. 图像在设备上编码错误或在 Chromecast 上解码错误。

你看,自从我发送照片时 Chromecast 的 状态是:

 statusCode 0 (success), 
 application name: Default Media Receiver, 
 status: Ready To Cast, 
 sessionId: 34D6CE75-4798-4294-BF45-2F4701CE4782, 
 wasLaunched: true.

这就是我将图像作为字符串发送的方式:

mCastManager.castImage(mCastManager.getEncodedImage(currentEntryPictureByPoint.getPath()));

使用的方法:

public void castImage(String encodedImage)
{
    Log.d(TAG, "castImage()");
    String image_string = createJsonMessage(MessageType.image, encodedImage);
    sendMessage(image_string);
}

private static String createJsonMessage(MessageType type, String message)
{
    return String.format("{\"type\":\"%s\", \"data\":\"%s\"}", type.toString(), message);
}

/**
 * Convert Image to encoded String
 * */
public String getEncodedImage(String path){
    Bitmap bm = BitmapFactory.decodeFile(path);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object
    byte[] byteArrayImage = baos.toByteArray();

    String encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);

    return encodedImage;
}

/**
 * Send a text message to the receiver
 *
 * @param message
 */
private void sendMessage(String message) {
    if (mApiClient != null && mCustomImageChannel != null) {
        try {
            Cast.CastApi.sendMessage(mApiClient,
                    mCustomImageChannel.getNamespace(), message)
                    .setResultCallback(new ResultCallback<Status>() {
                        @Override
                        public void onResult(Status result) {
                            if (!result.isSuccess()) {
                                //ALWAYS REACHING HERE :(
                                Log.e(TAG, "Sending message failed");
                            }
                        }
                    });
        } catch (Exception e) {
            Log.e(TAG, "Exception while sending message", e);
        }
    } else {
        Toast.makeText(mContext, message, Toast.LENGTH_SHORT)
                .show();
    }
}

如果发送过程是正确的,那么接收者是错误的,不知道如何正确解码这条消息。 我上传它的方式(好吧,至少我认为它已上传...)

  1. 在 Google Cast Console 上注册了新的自定义接收器并收到了应用程序 ID。
  2. 已创建 cast_receiver.js 文件。此文件中的代码应该将 Base64 字符串解码为图像。
  3. 将 Receiver 的代码从指南复制到 .js 文件并将内部的 NAMESPACE 更改为我的:urn:x-cast:com.it.innovations.smartbus
  4. 已将文件上传到 Google 驱动器并将其访问可见性修改为完全 public
  5. 已将 Cast Console 中的 link to file 字段复制到 URL 字段。这个link就是直接下载文件。
  6. 已重新启动 Chromecast。似乎它试图下载一些东西但不确定是否成功

如果有人遇到这个问题,请指出我做错了什么。感谢任何帮助。

P.S。告诉是否需要更多代码...

非常强烈建议避免使用sendMessage()发送任何大数据集;这些通道旨在用作控制通道,而不是作为发送大量数据的方式。一种更简单和更强大的方法是在您的本地应用程序(在发件人端)中嵌入一个微型网络服务器,并将您的图像 "serve" 嵌入到您的 chromecast 中。您可以将许多现成的嵌入式 Web 服务器放入您的应用程序中,并且几乎不需要任何配置;然后您可以使用默认或样式化的接收器向您的 chromecast 提供各种媒体,包括图像。