2013-05-22 17 views
7

カメラやギャラリーからビデオを取り込んでbase64データに変換し、そのデータをサーバーに送信するアプリケーションがありますが、base64データを変換するときは常にビデオデータのデータが正しくありません変数。このため私は、コードの下に使用:ビデオをbase64データに変換する方法

FileInputStream objFileIS = null; 
try 
{ 
    System.out.println("file = >>>> <<<<<" + selectedImagePath); 
    objFileIS = new FileInputStream(selectedImagePath); 
} 
catch (FileNotFoundException e) 
{ 
    e.printStackTrace(); 
} 
ByteArrayOutputStream objByteArrayOS = new ByteArrayOutputStream(); 
byte[] byteBufferString = new byte[1024]; 
try 
{ 
    for (int readNum; (readNum = objFileIS.read(byteBufferString)) != -1;) 
    { 
     objByteArrayOS.write(byteBufferString, 0, readNum); 
     System.out.println("read " + readNum + " bytes,"); 
    } 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
}      

videodata = Base64.encodeToString(byteBufferString, Base64.DEFAULT); 
Log.d("VideoData**> " , videodata); 

それが正しいしてください...

答えて

5

あなたがbyteBufferStringをエンコードするときは、データの読み取りの唯一の最後のチャンクをコードしています。 ByteArrayOutputStreamの全内容をエンコードする必要があります。次のコードでこれを行うことができます。

videodata = Base64.encodeToString(objByteArrayOS.toByteArray(), Base64.DEFAULT); 

しかし、ビデオのサイズが大きい場合、これはOutOfMemoryErrorをスローすることが可能性があります。

+0

はいを​​働いていた、あなたがサーブを願ってそれのための解決策になりますか? –

+0

これを見てください[質問](http://stackoverflow.com/q/11775036/1321873) – Rajesh

1

私はこのようにそれを解決する:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     Log.d("Imagen este ", String.valueOf(data)); 
     if(data!=null) { 
      switch (requestCode) { 
case SELECT_VIDEO: 
        Uri selectedVideoUri = data.getData(); 
        String[] projection = {MediaStore.Video.Media.DATA, MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DURATION}; 
        Cursor cursor = managedQuery(selectedVideoUri, projection, null, null, null); 

        cursor.moveToFirst(); 
        String filePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA)); 
        Log.d("File Name:",filePath); 

        Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath, MediaStore.Video.Thumbnails.MINI_KIND); 
        // Setting the thumbnail of the video in to the image view 
        msImage.setImageBitmap(thumb); 
        InputStream inputStream = null; 
// Converting the video in to the bytes 
        try 
        { 
         inputStream = getContentResolver().openInputStream(selectedVideoUri); 
        } 
        catch (FileNotFoundException e) 
        { 
         e.printStackTrace(); 
        } 
        int bufferSize = 1024; 
        byte[] buffer = new byte[bufferSize]; 
        byteBuffer = new ByteArrayOutputStream(); 
        int len = 0; 
        try 
        { 
         while ((len = inputStream.read(buffer)) != -1) 
         { 
          byteBuffer.write(buffer, 0, len); 
         } 
        } 
        catch (IOException e) 
        { 
         e.printStackTrace(); 
        } 
        System.out.println("converted!"); 

        String videoData=""; 
        //Converting bytes into base64 
        videoData = Base64.encodeToString(byteBuffer.toByteArray(), Base64.DEFAULT); 
        Log.d("VideoData**> " , videoData); 

        String sinSaltoFinal2 = videoData.trim(); 
        String sinsinSalto2 = sinSaltoFinal2.replaceAll("\n", ""); 
        Log.d("VideoData**> " , sinsinSalto2); 

        baseVideo = sinsinSalto2; 

ビデオデータは、ビデオのBASE64を持っている..私はあなたが私は同じエラーを得たのOutOfMemoryErrorので、どのような言及として、私は完璧な

+0

これは小さなビデオのために動作します。あなたはあなたのビデオサイズが大きくなると 'OutOfMemoryError'をかなり頻繁に実行します。 – CommonsWare

関連する問題