0

私のアプリケーションでは、オーディオ3gpファイルをサーバーに送信し、PHPを使用してそれをMySQLデータベースにBLOBとして保存しました。AndroidでMediaPlayerを使用して、BLOBから直接読み取られるオーディオストリームを再生する方法はありますか?BLOBを読み取ってファイルシステムに保存し、ダウンロードせずにAndroidで再生できることは知っていますが、可能であればサーバーにファイルを保存したくありません。アドバイスをありがとう。

4

2 に答える 2

1

次のコードのサンプルを試してください。要件に応じて変更してみてください。このコードはBLOBからファイルを読み取るだけです。

                   SQLiteDatabase myDb;       
               String MySQL;
               byte[] byteImage1 = null; 
               byte[] byteImage2 = null;
               MySQL="create table emp1(_id INTEGER primary key autoincrement, sample TEXT not null, picture BLOB);";
               myDb = openOrCreateDatabase("Blob List", Context.MODE_PRIVATE, null);
               myDb.execSQL(MySQL);
               String s=myDb.getPath();
               textView.append("\r\n" + s+"\r\n");       
               myDb.execSQL("delete from emp1");
               ContentValues newValues = new ContentValues();
               newValues.put("sample", "HI Hello");


            try
            {
            FileInputStream instream = new FileInputStream("/sdcard/AudioRecorder/AudioRecorder.wav"); 
            BufferedInputStream bif = new BufferedInputStream(instream); 
            byteImage1 = new byte[bif.available()]; 
            bif.read(byteImage1); 
            textView.append("\r\n" + byteImage1.length+"\r\n"); 
            newValues.put("picture", byteImage1); 

            long ret = myDb.insert("emp1", null, newValues); 
            if(ret<0) textView.append("\r\n!!! Error add blob filed!!!\r\n");
            } catch (IOException e) 
            {
                textView.append("\r\n!!! Error: " + e+"!!!\r\n");   
            }


            Cursor cur = myDb.query("emp1",null, null, null, null, null, null);
            cur.moveToFirst();
            while (cur.isAfterLast() == false)
            {
                textView.append("\r\n" + cur.getString(1)+"\r\n");
                cur.moveToNext();
            }
        ///////Read data from blob field////////////////////
            cur.moveToFirst();
            byteImage2=cur.getBlob(cur.getColumnIndex("picture")); 
            bmImage.setImageBitmap(BitmapFactory.decodeByteArray(byteImage2, 0, byteImage2.length));
            textView.append("\r\n" + byteImage2.length+"\r\n"); 

            cur.close();

            myDb.close();
于 2012-10-03T04:56:05.090 に答える
1

MediaPlayerでURL​​をフィードできると仮定すると、ファイルシステムやAndroidデバイスに保存せずに、BLOBをフェッチして出力にエコーするPHPスクリプトを介してストリーミングできます。PHPスクリプトがHTTPRange応答をサポートしている場合は、シークもサポートできます。

スクリプトsmartReadFile.phpRangeは、リクエストに関してファイルをストリーミングするためのPHPスクリプトです。
https://groups.google.com/forum/#!msg/jplayer/nSM2UmnSKKA/bC-l3k0pCPMJ

于 2012-10-03T04:56:18.523 に答える