Java 将输入流传递到视频视图

Java 将输入流传递到视频视图,java,android,video,inputstream,android-videoview,Java,Android,Video,Inputstream,Android Videoview,我有输入流,我需要将其作为视频视图传递: 但它说的是OutOfMemoryError 这是我的密码: //to convert input stream to string public static String convertStreamToString(InputStream is) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(is));

我有输入流,我需要将其作为视频视图传递:

但它说的是OutOfMemoryError

这是我的密码:

//to convert input stream to string
public static String convertStreamToString(InputStream is) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
        String line = null;

        while ((line = reader.readLine()) != null) {
            sb.append(line);
        }

        is.close();

        return sb.toString();
    }

//passing that string to video view
String total = convertStreamToString(inputStream);
Uri uri = Uri.parse(total);
videoHolder.setVideoURI(uri);
如何实现这一点

编辑

这是堆栈跟踪

07-17 17:46:34.242: E/AndroidRuntime(5384): FATAL EXCEPTION: main
07-17 17:46:34.242: E/AndroidRuntime(5384): java.lang.OutOfMemoryError
07-17 17:46:34.242: E/AndroidRuntime(5384):     at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at java.lang.StringBuilder.append(StringBuilder.java:216)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at com.abc.Utility.Utils.convertStreamToString(Utils.java:196)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at com.abc.xyz.VideoPlayer.onCreate(VideoPlayer.java:257)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at android.app.Activity.performCreate(Activity.java:4635)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2031)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2092)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at android.app.ActivityThread.access$600(ActivityThread.java:126)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1172)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at android.os.Looper.loop(Looper.java:137)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at android.app.ActivityThread.main(ActivityThread.java:4586)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at java.lang.reflect.Method.invokeNative(Native Method)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at java.lang.reflect.Method.invoke(Method.java:511)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-17 17:46:34.242: E/AndroidRuntime(5384):     at dalvik.system.NativeStart.main(Native Method)

好的,我已经自己解决了,但是在视频文件开始之前有3到4秒的延迟

希望它能帮助一些人:

public static String getDataSource(String path) throws IOException {
      if (!URLUtil.isNetworkUrl(path)) {
            return path;
        } else {
           URL url = new URL(path);
           URLConnection cn = url.openConnection();
           cn.connect();
            InputStream stream = cn.getInputStream();
            if (stream == null)
                throw new RuntimeException("stream is null");
            File temp = File.createTempFile("mediaplayertmp", "dat");
            temp.deleteOnExit();
            String tempPath = temp.getAbsolutePath();
            FileOutputStream out = new FileOutputStream(temp);
            byte buf[] = new byte[128];
            do {
                int numread = stream.read(buf);
                if (numread <= 0)
                    break;
                out.write(buf, 0, numread);
            } while (true);
            try {
                stream.close();
                out.close();
            } catch (IOException ex) {
              //  Log.e(TAG, "error: " + ex.getMessage(), ex);
            }
            return tempPath;
        }
    }
公共静态字符串getDataSource(字符串路径)引发IOException{
如果(!URLUtil.isNetworkUrl(路径)){
返回路径;
}否则{
URL=新URL(路径);
URLConnection cn=url.openConnection();
cn.connect();
InputStream=cn.getInputStream();
if(流==null)
抛出新的RuntimeException(“流为null”);
File temp=File.createTempFile(“mediaplayertmp”、“dat”);
temp.deleteOnExit();
字符串tempPath=temp.getAbsolutePath();
FileOutputStream out=新的FileOutputStream(临时);
字节buf[]=新字节[128];
做{
int numread=stream.read(buf);

if(numread)请发布整个堆栈跟踪。您是将视频文件强制转换为字符串对象吗?:D还是重新措辞-在字符串对象中加载视频文件?@commonware我发布了堆栈跟踪您从何处获取此流?请记住
setVideoURI()
获取URI,例如
文件://
http://
路径。输入流是classLoader.getResourceAsStream,