如何从 byteArray 流式传输视频
fun streamVideoListener(frame: ByteArray){
// receiving H.264 frames every 100ms.
}
我尝试了 FFmpeg 库。合并 100 帧并制作几秒钟的视频并将其添加到 ExoPlayer 播放列表。但性能一点都不好。 我还尝试了 NanoHttpd 库。我可以发送一个简单的 .mp4 视频文件并使用 vlc 或 MxPlayer 播放它,但不知道如何流式传输不断增长的视频文件(无需刷新页面)
您需要实现一个自定义数据源,该数据源实现 com.google.android.exoplayer.upstream.DataSource 接口或从 exoplayer 库扩展 BaseDataSource。存储字节数组并在读取方法中提供存储的字节数组。你可以在exoplayer库的RtmpDataSource类中看到用法
可以直接使用
ByteArrayDataSource
:https://github.com/google/ExoPlayer/issues/5571
一旦有了可用于视频的字节数组,您就可以使用 DataSource
传递它来创建
ByteArrayDataSource
private MediaSource createMediaSourceFromByteArray(byte[] data) {
ByteArrayDataSource byteArrayDataSource = new ByteArrayDataSource(data);
DataSource.Factory factory = new DataSource.Factory() {
@Override
public DataSource createDataSource() {
return byteArrayDataSource;
}
};
MediaSource mediaSource = new ExtractorMediaSource.Factory(factory)
.setExtractorsFactory(new DefaultExtractorsFactory())
.createMediaSource(Uri.EMPTY);
return Objects.requireNonNull(mediaSource, "MediaSource cannot be null");
}