Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android 2.3.4-Http实时流媒体_Java_Android_Http Live Streaming - Fatal编程技术网

Java Android 2.3.4-Http实时流媒体

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

我正在为一个客户端做这个项目,我们应该将音频从服务器传输到运行Android Gingerbread的设备上。要检索流,Android客户端需要请求不同的播放列表,然后请求播放列表本身(URI指向TS文件块本身的播放列表)。完成后,客户端应用程序将解密区块并将其发送到平台进行播放

我遇到的问题是安全问题。我们的客户(有问题的公司)使用专有加密方案,通过HTTP请求提前解密TS文件块,而不是遵循HLS规范,通过索引文件中列出的URI提供密钥文件。据我所知,如果索引文件中包含密钥文件URI,Android Mediaplayer框架能够找到这些密钥文件并生成/找到适当的IVs进行解密

不幸的是,这一切意味着我无法解密文件块并播放流,而每个段之间没有间隙——我通过对每个段发出HTTP GET请求、将它们下载到内部存储、应用解密,然后使用以下代码播放它们来实现这一点:

  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不是很精通++


有什么我遗漏的吗?

是缓冲区吗?我有一个类似的问题,我们有一个循环缓冲区,它能够解码内容并发送。我不确定这是否符合你的问题。