如何使用 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 看看是否有帮助,但第一个应该有效。