Friday, August 24, 2012

[android-developers] Re: video streaming from Android without saving on sdcard

Thank you for response.
Because i dont quite know ho to do it using HTTP server :)
For example how Apache can write input stream into mp4 file.
Could you please give me an example?


пятница, 24 августа 2012 г., 21:10:24 UTC+5 пользователь bob написал:

Why not put the mp4 on an HTTP server?  Why would you write your own server for this?



On Friday, August 24, 2012 12:24:46 AM UTC-5, Sever wrote:
I have code:

    private MediaRecorder recorder;
    
    String hostname = "192.168.1.125";
    int port = 1935;
    Socket socket;
    ParcelFileDescriptor pfd;
    public void start()
        {
 
    try {
    socket = new Socket(InetAddress.getByName(hostname), port);
    pfd = ParcelFileDescriptor.fromSocket(socket);
   
    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
       
      recorder.setOutputFile(pfd.getFileDescriptor()); 
      //  String filename = String.format("/sdcard/%d.mp4", System.currentTimeMillis());
      // 
      // recorder.setOutputFile(filename);
       
    try
            {
       recorder.prepare();
                recorder.start();
            }
            catch (IllegalStateException e)
            {
       e.printStackTrace();
            }
            catch (IOException e)
            {
       e.printStackTrace();
            }
        }

And Server side:

    import java.io.DataInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
   
            public static void main(String[] args) 
            {
                           
            try
                    {
                    System.out.println("create sock");
                    ServerSocket svsock = new ServerSocket(1935);
                           
                    System.out.println("accept");
                    Socket sock = svsock.accept();
                    System.out.println("buffer read");
                    
                    FileOutputStream outFile = null;
    
    String filename = String.format("%d.mp4", System.currentTimeMillis());
                                    
      try {
                                            outFile = new FileOutputStream(filename);
                                            System.out.println(filename);
                                    } catch (IOException e1) {
                                            e1.printStackTrace();
                                    }
   
                      InputStream is = new DataInputStream(sock.getInputStream());
                                    byte[] byteBuffer = new byte[1024];
                                       
                                    int allsize = 0;
                                    while(sock.isConnected()) {
                                            
                                    int size = is.read(byteBuffer);
                                            if (size == -1){
                                                    break;
                                            } else {
                                                    outFile.write(byteBuffer, 0, size);
                                            }
                                            allsize += size;
      
                                    }
                                    System.out.println("close size=" + allsize);
                                    outFile.close();
                                    sock.close();
                                                
                    }
                    catch(Exception e)
                    {
                            e.printStackTrace();
                    }       
                    
                    System.out.println("endmain");
            }
    }

I test it on Android 2.2.2 (HTC quiet brilliant) and all works fine. When I press "start" button Server create file and record data from stream to file. After this file is normally play in VLC player and etc.


But when I test it on Android 4.0.4 (Galaxy S2) Server create file and record data from stream to file but not play in VLC (and other players too) and give me error 

mp4 error: MP4 plugin discarded (no moov,foov,moof box)
avcodec error: Could not open �codec demux error: Specified event object handle is invalid
ps error: cannot peek
main error: no suitable demux module for `file/:///C:/1345461283455.mp4'

I also try to upload this file to youtube, but after upload youtube give me error like file format is unsupported.


But Android 4.0.4 (Galaxy S2) succesfully create and then play file when I save it on phone memory (not stream to server)

I think problem maybe on server side, or something changed on android 4.0.4.

Please, help me.
Thanks in advance.

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

No comments:

Post a Comment