2011-08-31 261 views
1

我想将从rtp(实时)流录制的H264视频存储到文件中。 我已经试过这个简单的java程序,但vlc播放器无法打开文件。将RTP视频流(H264编解码器)写入mp4文件

这里是我的代码:

try 
    { 
     socket = new DatagramSocket(port); 
     fos = new FileOutputStream(filePath + outputFileName); 

     do 
     { 
      DatagramPacket in = new DatagramPacket(inData, inData.length); 
      socket.receive(in); 

      byte[] bytes = in.getData(); 

      if (curPos < buffer.length) 
      { 
       for (int i = 0; i < bytes.length; i++) 
       { 
        buffer[curPos] = bytes[i]; 
        curPos++; 

        if (curPos >= buffer.length) 
        { 
         receivePackets = false; 
         break; 
        } 
       } 
      } 
      else 
      { 
       receivePackets = false; 
      } 

      Thread.sleep(SOCKET_TIMEOUT); 
     } 
     while (receivePackets); 

     fos.write(buffer, 0, buffer.length);    

     if (fos != null) 
     { 
      fos.close(); 
     } 

     if (socket != null) 
     { 
      socket.close(); 
     } 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (InterruptedException e) 
    { 
     e.printStackTrace(); 
    } 

的文件将被创建,但它无法打开。 是否有任何标题信息需要剪切或添加到字节数组中以获取正确的视频文件?

UPDATE:

OK,这个问题似乎是H264 RTP分组的NAL头部信息,因为我可以打开一个标准RTP头录制的H263视频(但视频的质量特别糟糕)。

+0

嗨Rithe,你解决了这个问题吗?如何从rtp数据包录制视频?您是否使用过任何RTP库去掉RTP头文件,以便您可以让NAL单元将其写入文件?问候,Ram – Ram

+0

我还没有将数据保存到文件。我试图通过RTP/RTSP实现实时流。如果您仍在寻找解决方案,也许[spydroid应用程序](http://code.google.com/p/spydroid-ipcamera/)包含一些有用的信息。 – Rich

回答

0

你必须从RTP包中解压视频数据

+0

考虑在答案中提供更有用的信息,否则这更多的是评论。 – user3071284