Java Android 2.3.4-Http实时流媒体
我正在为一个客户端做这个项目,我们应该将音频从服务器传输到运行Android Gingerbread的设备上。要检索流,Android客户端需要请求不同的播放列表,然后请求播放列表本身(URI指向TS文件块本身的播放列表)。完成后,客户端应用程序将解密区块并将其发送到平台进行播放 我遇到的问题是安全问题。我们的客户(有问题的公司)使用专有加密方案,通过HTTP请求提前解密TS文件块,而不是遵循HLS规范,通过索引文件中列出的URI提供密钥文件。据我所知,如果索引文件中包含密钥文件URI,Android Mediaplayer框架能够找到这些密钥文件并生成/找到适当的IVs进行解密 不幸的是,这一切意味着我无法解密文件块并播放流,而每个段之间没有间隙——我通过对每个段发出HTTP GET请求、将它们下载到内部存储、应用解密,然后使用以下代码播放它们来实现这一点:Java Android 2.3.4-Http实时流媒体,java,android,http-live-streaming,Java,Android,Http Live Streaming,我正在为一个客户端做这个项目,我们应该将音频从服务器传输到运行Android Gingerbread的设备上。要检索流,Android客户端需要请求不同的播放列表,然后请求播放列表本身(URI指向TS文件块本身的播放列表)。完成后,客户端应用程序将解密区块并将其发送到平台进行播放 我遇到的问题是安全问题。我们的客户(有问题的公司)使用专有加密方案,通过HTTP请求提前解密TS文件块,而不是遵循HLS规范,通过索引文件中列出的URI提供密钥文件。据我所知,如果索引文件中包含密钥文件URI,Andr
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
File dir = new File(TS_FILE_DIR);
String [] files = dir.list();
mTsFiles = new ArrayList<File>();
for (String file : files) {
String path = TS_FILE_DIR + file;
mTsFiles.add(new File(path));
}
mMediaController = new MediaController(this);
mVideoView = (VideoView)findViewById(R.id.video_view_1);
mVideoView.setVideoPath(mTsFiles.get(0).getAbsolutePath());
mVideoView.setMediaController(mMediaController);
mVideoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.start();
}
});
mVideoView.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.pause();
mp.reset();
if (mIndex < mTsFiles.size()) {
mIndex++;
try {
mp.setDataSource(mTsFiles.get(mIndex).getAbsolutePath());
mp.prepareAsync();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
});
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
文件目录=新文件(TS_文件目录);
String[]files=dir.list();
mTsFiles=newarraylist();
用于(字符串文件:文件){
字符串路径=TS\U文件\U目录+文件;
添加(新文件(路径));
}
mMediaController=新媒体控制器(此);
mVideoView=(VideoView)findviewbyd(R.id.video\u view\u 1);
mVideoView.setVideoPath(mTsFiles.get(0.getAbsolutePath());
mVideoView.setMediaController(mMediaController);
mVideoView.setOnPreparedListener(新的OnPreparedListener(){
@凌驾
已准备好公开作废(MediaPlayer mp){
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.start();
}
});
mVideoView.setOnCompletionListener(新的OnCompletionListener(){
@凌驾
完成时的公共作废(MediaPlayer mp){
mp.pause();
mp.reset();
if(mIndex
我试过:
1) 使用2个MediaPlayer并在2个播放器之间切换,但根本不起作用
2) 看看ICS的源代码,了解这一切是如何工作的,但它非常复杂,我对c不是很精通++
有什么我遗漏的吗?是缓冲区吗?我有一个类似的问题,我们有一个循环缓冲区,它能够解码内容并发送。我不确定这是否符合你的问题。