我目前正在尝试从 Android 设备流式传输实时视频。不幸的是,我无法阅读通过网络获得的流。
我发现问题出在用于录制视频的格式(ISO 媒体、MPEG v4 系统、3GPP)。
这是我初始化记录器的方法:
// Sources
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
// HD
CamcorderProfile highProfile = CamcorderProfile
.get(CamcorderProfile.QUALITY_HIGH);
recorder.setProfile(highProfile);
recorder.setOutputFile(PATH);
如果当前正在拍摄视频(仍在 FS 上写入),那么当我读取文件的开头时,我会得到以下内容(我用 得到了那个文件$ adb pull /sdcard/video
):
MacBook-Romain:result rbochet$ hexdump video-current.mp4 | head -2
0000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000010 00 00 00 00 00 00 00 00 00 00 00 08 6d 64 61 74
录制结束时,标题如下所示:
MacBook-Romain:result rbochet$ hexdump video.mp4 | head -2
0000000 00 00 00 18 66 74 79 70 33 67 70 34 00 00 03 00
0000010 33 67 70 34 33 67 70 36 00 07 56 83 6d 64 61 74
事实是,这种方法并不是最适合直播,因为我们只是不知道文件会有多长和大......</p>
问题:我该如何做实际的流媒体?我看到的解决方案之一是发送小块,但我认为这个解决方案实际上很糟糕......应该存在更好的东西,因为像 SipDroid 这样的程序能够流式传输。如果你能理解他们的代码,你能解释一下吗?我看了一下代码,但对我来说不是那么清楚。
该代码将作为开源发布,因此每个寻找解决这种棘手情况的方法的人都会很乐意为您提供帮助(我知道在 SO 上有很多类似的线程)。
这是基本相机应用程序的代码:https ://github.com/rbochet/Simple-Camera-App
谢谢你的帮助。