如何使用 Chromecast 进行幻灯片放映
How to do a slideshow with Chromecast
我的 SD 卡中有一个包含多张图片的文件夹,我想使用 Chromecast 作为幻灯片将它们发送到我的电视。我正在使用 nanoHTTPD 来提供这些图像,每次单击 'next button' 时,我都会将列表中的下一张图像提供给服务器。我得到的 ip 地址的一个例子是:192.168.X.XX:8080
。我正在尝试刷新此 ip 地址,因此当我单击提到的 'next button' 时,我可以在电视中显示下一个图像。问题是我总是看到相同的图像,但如果我断开并再次连接接收器,显示的图像是正确的。
@Override
public Response serve(String uri, Method method, Map<String, String> header,Map<String, String> parameters, Map<String, String> files) {
String mediasend = "image/jpeg";
FileInputStream fis = null;
String root1 = Environment.getExternalStorageDirectory().toString() + "/saved_images";
//Log.d("Files", "Path: " + root1);
File f = new File(root1);
File file[] = f.listFiles();
Log.d("Files", "Size: " + file.length);
for (int i = 0; i < file.length; i++) {
Log.d("Files", "FileName:" + file[i].getName());
try {
fis = new FileInputStream(Environment.getExternalStorageDirectory()
+ "/saved_images" + "/" + file[page_number].getName());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return new NanoHTTPD.Response(etsiit.etsiitcast_def.NanoHTTPD.Response.Status.OK, mediasend, fis);
}
}
每次单击 'next button' 时 page_number
都会增加。
private void startSlideShow() {
MediaMetadata mediaMetadata = new MediaMetadata( MediaMetadata.MEDIA_TYPE_MOVIE);
mediaMetadata.putString(MediaMetadata.KEY_TITLE, getString( R.string.titulo_video ) );
String dir_ip = wifiIpAddress();
MediaInfo mediaInfo = new MediaInfo.Builder(dir_ip)
.setContentType( "image/jpeg" )
.setStreamType( MediaInfo.STREAM_TYPE_BUFFERED )
.setMetadata( mediaMetadata )
.build();
try {
mRemoteMediaPlayer.load( apiClient, mediaInfo, true )
.setResultCallback( new ResultCallback<RemoteMediaPlayer.MediaChannelResult>() {
@Override
public void onResult( RemoteMediaPlayer.MediaChannelResult mediaChannelResult ) {
if( mediaChannelResult.getStatus().isSuccess() ) {
mVideoIsLoaded = true;
}
}
} );
} catch( Exception e ) {
}
}
我正在使用wifiIpAddress
获取IP地址:
public String wifiIpAddress () {
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
ipdevice=String.format("http://%d.%d.%d.%d:8080",(ipAddress & 0xff),(ipAddress >> 8 & 0xff),(ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff));
return ipdevice;
}
接收方正在缓存图像,因为您为所有图像传递的 URL 是相同的,因此您需要强制它重新加载图像并意识到它是一个新图像。通常人们会在 url 中添加时间戳或类似的东西来欺骗浏览器它是一个新资源;你可以这样做,也可以尝试使用 no-cache pragma 看看是否有帮助,但第一个应该有效。
我的 SD 卡中有一个包含多张图片的文件夹,我想使用 Chromecast 作为幻灯片将它们发送到我的电视。我正在使用 nanoHTTPD 来提供这些图像,每次单击 'next button' 时,我都会将列表中的下一张图像提供给服务器。我得到的 ip 地址的一个例子是:192.168.X.XX:8080
。我正在尝试刷新此 ip 地址,因此当我单击提到的 'next button' 时,我可以在电视中显示下一个图像。问题是我总是看到相同的图像,但如果我断开并再次连接接收器,显示的图像是正确的。
@Override
public Response serve(String uri, Method method, Map<String, String> header,Map<String, String> parameters, Map<String, String> files) {
String mediasend = "image/jpeg";
FileInputStream fis = null;
String root1 = Environment.getExternalStorageDirectory().toString() + "/saved_images";
//Log.d("Files", "Path: " + root1);
File f = new File(root1);
File file[] = f.listFiles();
Log.d("Files", "Size: " + file.length);
for (int i = 0; i < file.length; i++) {
Log.d("Files", "FileName:" + file[i].getName());
try {
fis = new FileInputStream(Environment.getExternalStorageDirectory()
+ "/saved_images" + "/" + file[page_number].getName());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return new NanoHTTPD.Response(etsiit.etsiitcast_def.NanoHTTPD.Response.Status.OK, mediasend, fis);
}
}
每次单击 'next button' 时 page_number
都会增加。
private void startSlideShow() {
MediaMetadata mediaMetadata = new MediaMetadata( MediaMetadata.MEDIA_TYPE_MOVIE);
mediaMetadata.putString(MediaMetadata.KEY_TITLE, getString( R.string.titulo_video ) );
String dir_ip = wifiIpAddress();
MediaInfo mediaInfo = new MediaInfo.Builder(dir_ip)
.setContentType( "image/jpeg" )
.setStreamType( MediaInfo.STREAM_TYPE_BUFFERED )
.setMetadata( mediaMetadata )
.build();
try {
mRemoteMediaPlayer.load( apiClient, mediaInfo, true )
.setResultCallback( new ResultCallback<RemoteMediaPlayer.MediaChannelResult>() {
@Override
public void onResult( RemoteMediaPlayer.MediaChannelResult mediaChannelResult ) {
if( mediaChannelResult.getStatus().isSuccess() ) {
mVideoIsLoaded = true;
}
}
} );
} catch( Exception e ) {
}
}
我正在使用wifiIpAddress
获取IP地址:
public String wifiIpAddress () {
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
ipdevice=String.format("http://%d.%d.%d.%d:8080",(ipAddress & 0xff),(ipAddress >> 8 & 0xff),(ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff));
return ipdevice;
}
接收方正在缓存图像,因为您为所有图像传递的 URL 是相同的,因此您需要强制它重新加载图像并意识到它是一个新图像。通常人们会在 url 中添加时间戳或类似的东西来欺骗浏览器它是一个新资源;你可以这样做,也可以尝试使用 no-cache pragma 看看是否有帮助,但第一个应该有效。