gpt4 book ai didi

android - 如何解码从 parcelfiledescriptor 接收的 H.264 视频流

转载 作者:行者123 更新时间:2023-12-03 12:00:43 26 4
gpt4 key购买 nike

我正在两部安卓手机之间创建一个实时视频流的安卓应用程序。我已经在这些设备之间建立了套接字连接。我正在一个设备中捕获视频并将流发送到其他设备,但目前我只想保存在接收方移动设备中并保存它。我正在使用 MediaRecorder 录制在一个设备中,因此使用 parcelfiledescriptor 流式传输到接收器通过设置数据对象

客户端代码

    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
mediaRecorder.setOutputFile(pfd.getFileDescriptor());

接收方代码
  pfd= ParcelFileDescriptor.fromSocket(s);
InputStream in = new FileInputStream(pfd.getFileDescriptor());
DataInputStream clientData = new DataInputStream(in);
OutputStream newDatabase = new FileOutputStream(file);
int available=in.available();
byte[] buffer = new byte[available];
int length;


while((length = in.read(buffer)) > 0)
{
newDatabase.write(buffer, 0, length);

}
newDatabase.close();

正在接收端移动设备上创建视频文件,但它无法接收任何字节。所以我必须在接收端解码即将到来的流,因为发送的视频流是在录制时编码的。那么如何解码接收到的流呢?我找到了一些像 MediaExtractor 和 MediaCodec 这样的解决方案...但是这是否适用于实时视频捕获,而且我正在测试 android version 2.3.6 GingerBread是否可以从 MediaCodec 解码视频流?对于 2.3.6 版或其他方法可用?

最佳答案

The video file is being created on the receiver side mobile, but it's not able to receive any bytes.



如果我理解正确,那么您没有从套接字获得任何数据。那是一个单独的问题,与视频格式、解码或编码无关。

要调试您的套接字,使用一个单独的应用程序来转储接收到的数据可能会有所帮助。一旦数据看起来不错,您就可以进行下一步 - 解码视频。

问题的第二部分是视频格式。您正在使用 mp4,它不能用于流式传输。 Here is more info about the format structure.您可以使用 mp4 将视频录制到本地文件中,然后通过套接字将整个文件传输到某处,但由于套接字的不可搜索性质(如链接文章中所述),无法完成真正的实时流式传输。文件开头有一 block 元数据,它充当“目录”,没有它,以前的数据只是垃圾。问题是,只有在获得所有内容后,您才能组装“目录”。但是在那一刻,数据已经通过套接字发送了,你不能在它的开头插入任何东西。

很少有解决方法,但这只是为了您 future 的研究,我还没有使用它们。

最直观的方法是从 mp4 切换到 mpeg-ts,这是一个专为流媒体设计的容器。查看 MediaRecorder.OutputFormat 中的隐藏常量值为 8。

另一种选择是将原始 H.264 数据打包到 RTP/RTCP 数据包中,这也是为流式传输而设计的协议(protocol)。此外,您的应用程序将能够流式传输到任何支持此协议(protocol)的设备(例如运行 VLC 的 PC)。如需进一步研究,请查看 Spydroid IP camera ,这正是事情。

关于android - 如何解码从 parcelfiledescriptor 接收的 H.264 视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18886981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com