2

问题是将本地图像从手机作为编码的 Base64 字符串发送到 Chromecast。并使用我的自定义接收器对其进行解码。我正在遵循基于此项目示例的指南。

我认为问题可能出在:

  1. 自定义接收器不合适(我不擅长 JS)。
  2. Chromecast 没有加载那个接收器(我不知道如何检查)。
  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 控制台上注册了新的自定义接收器并收到了应用程序 ID。
  2. 创建 cast_receiver.js 文件。该文件中的代码应该将 Base64 字符串解码为图像。
  3. 将 Receiver 的代码从指南复制到 .js 文件,并将内部的 NAMESPACE 更改为我的:urn:x-cast:com.it.innovations.smartbus
  4. 在 Google 云端硬盘上上传文件,并将其访问可见性修改为完全公开
  5. 将文件链接复制到 Cast Console 中的 URL 字段。此链接是文件的直接下载。
  6. 重新启动 Chromecast。似乎它试图下载一些东西但不确定是否成功

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

PS告诉是否需要更多代码......

4

1 回答 1

4

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

于 2015-06-05T15:43:30.077 回答