Javascript 将Base64编码图像作为字符串发送到Chromecast
问题是将本地图像以编码的Base64字符串的形式从手机发送到Chromecast。然后用我的自定义接收器解码。我遵循的指南是基于 我认为问题可能在于:Javascript 将Base64编码图像作为字符串发送到Chromecast,javascript,android,chromecast,google-cast,custom-receiver,Javascript,Android,Chromecast,Google Cast,Custom Receiver,问题是将本地图像以编码的Base64字符串的形式从手机发送到Chromecast。然后用我的自定义接收器解码。我遵循的指南是基于 我认为问题可能在于: 自定义接收器不合适(我不擅长JS) Chromecast没有加载那个接收器(我不知道如何检查) 图像在设备上编码错误或在Chromecast上解码 你看,似乎我对每一项都进行了正确编码,因为我发送照片时Chromecast的状态是: statusCode 0 (success), application name: Default Medi
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();
}
}
public void castImage(字符串编码图像)
{
Log.d(标记“castImage()”);
String image_String=createJsonMessage(MessageType.image,encodedImage);
sendMessage(图像\字符串);
}
私有静态字符串createJsonMessage(MessageType类型,字符串消息)
{
返回String.format(“{\'type\':\%s\',\'data\':\%s\'”),type.toString(),message);
}
/**
*将图像转换为编码字符串
* */
公共字符串getEncodedImage(字符串路径){
位图bm=BitmapFactory.decodeFile(路径);
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG,100,baos);//bm是位图对象
字节[]byteArrayImage=baos.toByteArray();
字符串encodedImage=Base64.encodeToString(byteArrayImage,Base64.DEFAULT);
返回图像;
}
/**
*向接收者发送文本消息
*
*@param消息
*/
私有void发送消息(字符串消息){
if(mApiClient!=null&&mCustomImageChannel!=null){
试一试{
Cast.CastApi.sendMessage(mApiClient,
mCustomImageChannel.getNamespace(),消息)
.setResultCallback(新的ResultCallback(){
@凌驾
公共结果无效(状态结果){
如果(!result.issucess()){
//始终到达此处:(
Log.e(标记“发送消息失败”);
}
}
});
}捕获(例外e){
日志e(标记“发送消息时异常”,e);
}
}否则{
Toast.makeText(mContext、message、Toast.LENGTH\u SHORT)
.show();
}
}
如果发送过程是正确的,那么接收方是错误的,不知道如何正确解码此消息。
我上传它的方式(好吧,至少我认为它上传了…)
urn:x-cast:com.it.innovations.smartbus
请说明是否需要更多的代码…I非常强烈地建议避免使用
sendMessage()
用于发送任何大型数据集;这些通道被用作控制通道,而不是发送数据块的方式。一种更简单、更可靠的方法是在本地应用程序(发送方)中嵌入一个小型哑web服务器并“服务”将图像发送到chromecast。有许多现成的嵌入式web服务器,您可以将其放入应用程序中,几乎不需要配置;然后,您甚至可以使用默认或样式的接收器将各种媒体(包括图像)发送到chromecast。谢谢您的回答!您所说的“将图像发送到chromecast”是什么意思?一些例子可以说明这一点。如果这是sendMessage()的一种替代方案
我想了解它是如何工作的。您可以在手机应用程序中嵌入一个web服务器,并对其进行设置,以便您感兴趣的媒体可以通过该嵌入式web服务器访问。然后,您可以创建一个常规的MediaInfo,对于其URL,您可以指向web服务器为您的媒体提供的URL(例如,一个媒体项目可能通过您的嵌入式web服务器公开,url类似于“”,其中192.168.1.101是您家中wifi网络上手机的ip地址)。然后chromecast可以通过该url访问该内容,就像互联网上的任何其他内容一样。在这种情况下,图像将通过互联网而不是WiFi网络发送,对吗?chromecast基本上将下载而不是接收,不是吗?您的IP地址是WiFi网络上手机的本地地址,因此数据包不会离开您的本地WiFi网络好的,谢谢。如果没有人会提出更简单的解决方案,我会试试这个,并标记为答案