在 Android 中流式传输 byteArray 视频

问题描述 投票:0回答:2

如何从 byteArray 流式传输视频

fun streamVideoListener(frame: ByteArray){
        // receiving H.264 frames every 100ms.
}

我尝试了 FFmpeg 库。合并 100 帧并制作几秒钟的视频并将其添加到 ExoPlayer 播放列表。但性能一点都不好。 我还尝试了 NanoHttpd 库。我可以发送一个简单的 .mp4 视频文件并使用 vlc 或 MxPlayer 播放它,但不知道如何流式传输不断增长的视频文件(无需刷新页面)

android exoplayer android-video-player android-ffmpeg nanohttpd
2个回答
1
投票

您需要实现一个自定义数据源,该数据源实现 com.google.android.exoplayer.upstream.DataSource 接口或从 exoplayer 库扩展 BaseDataSource。存储字节数组并在读取方法中提供存储的字节数组。你可以在exoplayer库的RtmpDataSource类中看到用法


0
投票

可以直接使用

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

}

© www.soinside.com 2019 - 2024. All rights reserved.