9

カメラまたはギャラリーからビデオを取得してbase64データに変換し、そのデータをサーバーに送信するアプリがありますが、base64データを変換するたびにvideodata変数のデータが正しくないという問題があります。このために、以下のコードを使用しました:

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);

正しくしてください...

4

3 に答える 3

5

をエンコードするとbyteBufferString、読み取ったデータの最後のチャンクのみがエンコードされます。の内容全体をエンコードする必要がありByteArrayOutputStreamます。これは、次のコードで実行できます。

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

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

于 2013-05-22T05:57:27.813 に答える
3

私は次のように解決します:

@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;

videoDataにはビデオの base64 があります。

于 2017-05-30T21:15:52.477 に答える