簡體   English   中英

將Base64編碼的圖像作為字符串發送到Chromecast

[英]Send Base64 encoded image as string to Chromecast

問題是將電話中的本地圖像作為編碼的Base64字符串發送到Chromecast。 並使用我的自定義接收器對其進行解碼。 我正在遵循基於該項目樣本的 指南。

我建議問題可能出在:

  1. 自定義接收器不合適(我不太擅長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.

這就是我將圖像作為String發送的方式:

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控制台中復制了指向文件到URL的鏈接 該鏈接是文件的直接下載。
  6. 重新啟動Chromecast。 似乎它嘗試下載某些內容,但不確定是否成功

如果有人遇到此問題,請指出我做錯了什么。 感謝任何幫助。

PS告訴是否需要更多代碼...

強烈建議避免使用sendMessage()發送任何大數據集。 這些通道應被用作控制通道,而不是作為發送數據塊的方式。 一種更簡單,更可靠的方法是在本地應用程序中(發送方)嵌入一個小型的Web服務器,然后將圖像“提供”給chromecast。 您可以在應用程序中放入許多現成的嵌入式Web服務器,並且幾乎不需要進行任何配置。 那么您甚至可以使用默認或樣式化的接收器將各種媒體(包括圖像)投放到chromecast。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM