【问题标题】:video streaming from Android without saving on sdcard来自 Android 的视频流,无需保存在 sdcard 上
【发布时间】:2012-09-25 04:27:16
【问题描述】:

我有代码:

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

和服务器端:

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

我在 Android 2.2.2 上测试它(HTC 安静辉煌),一切正常。当我按下“开始”按钮时,服务器创建文件并从流到文件记录数据。此文件在 VLC 播放器等中正常播放后。

但是当我在 Android 4.0.4 (Galaxy S2) 服务器上测试它时,创建文件并从流到文件记录数据,但不能在 VLC(以及其他播放器)中播放并给我错误

mp4 错误:MP4 插件被丢弃(没有 moov、foov、moof 框) avcodec 错误:无法打开 �codec demux 错误:指定的事件对象句柄无效 ps错误:无法窥视 主要错误:没有适合`file/:///C:/1345461283455.mp4'的解复用模块

我也尝试将此文件上传到 youtube,但上传 youtube 后给我错误,例如文件格式不受支持。

但 Android 4.0.4 (Galaxy S2) 在我将文件保存在手机内存中(而不是流式传输到服务器)时成功创建并播放文件

我认为问题可能出在服务器端,或者在 android 4.0.4 上发生了一些变化。

请帮帮我。 提前致谢。

【问题讨论】:

    标签: java android sockets android-mediaplayer java-server


    【解决方案1】:

    试试这个

    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    recorder.setOutputFile(pfd.getFileDescriptor()); 
    

    我认为它应该可以解决问题。试试看是否有帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2016-03-23
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多