从 SD 卡创建播放列表并将其发送到 Chromecast
Creating playlist from sd card and sending it to Chromecast
我正在开发一个将播放列表发送到 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();
}
}
请帮帮我,我不知道该怎么办。
您需要:
- 将您的本地服务器配置为按名称提供文件,即如果我想获取名为 "video1.mp4" 的文件,我需要使用“http://.../video1.mp4”。这允许在需要时访问多个文件。
- 您需要使用适当的 API 创建一个队列:创建 MediaQueueItems,一个用于播放列表中的每个视频,然后将它们放入一个数组中并使用 RemoteMediaPlayer#queueLoad() 方法加载它。您可能需要在它们上设置 autoplay=true。
您可以查看 CastVidoes-android 应用作为示例;唯一的区别是您的视频网址指向您的嵌入式服务器。
我正在开发一个将播放列表发送到 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();
}
}
请帮帮我,我不知道该怎么办。
您需要:
- 将您的本地服务器配置为按名称提供文件,即如果我想获取名为 "video1.mp4" 的文件,我需要使用“http://.../video1.mp4”。这允许在需要时访问多个文件。
- 您需要使用适当的 API 创建一个队列:创建 MediaQueueItems,一个用于播放列表中的每个视频,然后将它们放入一个数组中并使用 RemoteMediaPlayer#queueLoad() 方法加载它。您可能需要在它们上设置 autoplay=true。
您可以查看 CastVidoes-android 应用作为示例;唯一的区别是您的视频网址指向您的嵌入式服务器。