从 sd 卡创建播放列表并将其发送到 Chromecast

Posted

技术标签:

【中文标题】从 sd 卡创建播放列表并将其发送到 Chromecast【英文标题】:Creating playlist from sd card and sending it to Chromecast 【发布时间】:2015-08-26 14:15:07 【问题描述】:

我正在开发一个将播放列表发送到 Chromecast 的应用程序。 我想从本地媒体(视频、图像)创建播放列表。我的应用程序将从特定文件夹中获取所有视频和图像,并将创建一个播放列表。此播放列表将发送到 Chromecast。

如何实现这一点,我在手机上创建了 NanoHTTPD 服务器。并从那里提供视频。但是这个服务器一次只提供一个视频。

我想从本地服务器提供特定文件夹,然后想创建存储在该文件夹中的所有视频和图像的播放列表。

这是我的 NanoHTTPD:-

  public class WebServer extends NanoHTTPD 

public WebServer() throws IOException 

    super(8089);


@Override
public Response serve(String uri, Method method,
        Map<String, String> header, Map<String, String> parameters,
        Map<String, String> files)

    String answer = "";

    FileInputStream fis = null;
    String path;
    String fileOutput="";
    int counter;

    try 
    
                    path = Environment.getExternalStorageDirectory() + "/DCIM/Video/bbb.mp4";
                    fis = new FileInputStream(path);
     
    catch (Exception e) 
    
        // TODO Auto-generated catch block
        e.printStackTrace();
    
    return new NanoHTTPD.Response(Status.OK, "video/mp4", fis);


这就是我投射视频的方式:-

private void startVideo()

    MediaMetadata mediaMetadata = new MediaMetadata( MediaMetadata.MEDIA_TYPE_MOVIE );
    mediaMetadata.putString( MediaMetadata.KEY_TITLE, getString( R.string.video_title ) );

    String videoURL = Configuration.video_url; 

    MediaInfo mediaInfo = new MediaInfo.Builder( videoURL )
    .setContentType( getString( R.string.content_type_mp4 ) )
    .setStreamType( MediaInfo.STREAM_TYPE_BUFFERED )
    .setMetadata( mediaMetadata )
    .build();

    Toast.makeText(getApplicationContext(), "Video build " + videoURL, Toast.LENGTH_LONG).show();

    try 
    
        mRemoteMediaPlayer.load( mApiClient, mediaInfo, true )
        .setResultCallback( new ResultCallback<RemoteMediaPlayer.MediaChannelResult>() 
                
            @Override
            public void onResult( RemoteMediaPlayer.MediaChannelResult mediaChannelResult )
            
                if( mediaChannelResult.getStatus().isSuccess() ) 
                
                    mVideoIsLoaded = true;
                    mButton.setText( getString( R.string.pause_video ) );

                    Toast.makeText(getApplicationContext(), "Media loaded successfully", Toast.LENGTH_LONG).show();
                
            
                 );
     
    catch (IllegalStateException e) 
    
        Toast.makeText(getApplicationContext(), "Problem occurred with media during loading : " + e, Toast.LENGTH_LONG).show();
     
    catch (Exception e)
    
        Toast.makeText(getApplicationContext(), "Problem occurred with media during loading : " + e, Toast.LENGTH_LONG).show();
    

请帮帮我,我不知道该怎么做。

【问题讨论】:

【参考方案1】:

你需要:

配置您的本地服务器以按文件名提供文件,即如果我想获得一个名为“video1.mp4”的文件,我需要使用“http://.../video1.mp4”。这允许在需要时访问多个文件。 您需要使用适当的 api 创建一个队列:创建 MediaQueueItems,为播放列表中的每个视频创建一个,然后将它们放入一个数组并使用 RemoteMediaPlayer#queueLoad() 方法加载该数组。您可能需要在它们上设置 autoplay=true。

您可以查看CastVidoes-android 应用程序作为示例;唯一的区别是您的视频网址指向您的嵌入式服务器。

【讨论】:

谢谢先生,真的帮了我很多。现在的问题是我将视频和图像作为播放列表一起发送。它播放我的视频,但当它必须加载图像时,它自己卡在那里。 SDK中新增的队列API用于视频和音频项目;目前不支持队列中的图像。例如,队列中的视频/音频项目播放并结束,然后队列前进到下一个项目;如果您有图像,则没有关联的“持续时间”或“播放”功能,因此没有“前进到下一个项目”的概念。 好的,先生,但是有什么办法可以做到这一点。我的意思是,我想一起制作视频和图像的播放列表。那么我可以通过任何方式实现这一点,还是不可能做到这一点。 您可以编写自己的自定义接收器并处理这两种媒体类型并将您自己的消息发送到您的接收器。 先生,如何在按钮单击而不是 onCreateOptionsMenu 时显示 cromecast 设备列表对话框。你不能分享一些代码吗?

以上是关于从 sd 卡创建播放列表并将其发送到 Chromecast的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SD 卡播放视频

尝试将文件从 SD 卡附加到电子邮件

利用videoView创建播放器,实现展示视频列表和搜索sd卡功能 以及android6.0的动态授权等功能

Android - 将图像从 URL 保存到 SD 卡

更改C中缓冲区的播放速率?

如何从 SD 卡播放视频文件