简体   繁体   中英

Video file can not be played streaming

I am trying to play a remote video file through intent(default media player) but I also want to save it locally while it is being streamed. I am trying following code to save the steam locally in a video file which is working fine. Now I want to start my intent as soon as the file is being streamed but when intent is started I get the error " Sorry this video can not be played ". Note that if I move the intent code to end of this method when streaming is complete( when downloadedSize==totalSize ) then it works fine but I want to play while being streamed at the same time. Any help?

public String DownloadVideo(String Url, String fileName)
    {
    String filepath=null;
    try {
    URL url = new URL(Url);
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    urlConnection.setRequestMethod("GET");
    urlConnection.setDoOutput(true);
    urlConnection.connect();

    File SDCardRoot = Environment.getExternalStorageDirectory();
    File file = new File(SDCardRoot,fileName);
    if(file.createNewFile())
    {
    file.createNewFile();
    }
    FileOutputStream fileOutput = new FileOutputStream(file);
    InputStream inputStream = urlConnection.getInputStream();
    int totalSize = urlConnection.getContentLength();
    int downloadedSize = 0;

    byte[] buffer = new byte[1024];
    int bufferLength = 0; //used to store a temporary size of the buffer
    int counter=0;

    while ( (bufferLength = inputStream.read(buffer)) > 0 ) {

    fileOutput.write(buffer, 0, bufferLength);

    if(downloadedSize>2048)
    {
        Intent i = new Intent(Intent.ACTION_VIEW);
            i.setDataAndType(Uri.parse(file.getPath()),"video/*");
        startActivity(i);
    }
    downloadedSize += bufferLength;
    counter++;
    }
    fileOutput.close();
    if(downloadedSize==totalSize) {
        filepath=file.getPath();
                                }
    } catch (MalformedURLException e) {
    e.printStackTrace();
    } catch (IOException e) {
    filepath=null;
    e.printStackTrace();
    }
    return filepath;

    }

I think the problem is in this line:

i.setDataAndType(Uri.parse(file.getPath()),"video/*");

Your passing the your local file to the Intent, but that is the one that has not been downloaded yet. I think you should use the Url to stream the video, and store the contents in file

// Use the url of the remote location
i.setDataAndType(Uri.parse(Url),"video/*");
// Also, try to use lowercase for variables e.g. url vs Url

That way, you are streaming the remote url, and saving the contents to your local file. I may be misinterpreting the code, but I would start by looking into that

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM