C# 使用OpenGL从ffmpeg帧渲染视频

C# 使用OpenGL从ffmpeg帧渲染视频,c#,android,video,opengl-es,ffmpeg,C#,Android,Video,Opengl Es,Ffmpeg,我想知道如何将ffmpeg计算的原始RGB帧的视频渲染到Android中的OpenGL纹理 我的应用程序是一个Xamarin.Android项目,我使用的是一个ffmpeg C#包装器,其工作原理如下: while (ffmpeg.av_read_frame(pFormatContext, pPacket) >= 0) { if (pPacket->stream_index == pStream->index) { if (ffmpeg.avco

我想知道如何将ffmpeg计算的原始RGB帧的视频渲染到Android中的OpenGL纹理

我的应用程序是一个Xamarin.Android项目,我使用的是一个ffmpeg C#包装器,其工作原理如下:

while (ffmpeg.av_read_frame(pFormatContext, pPacket) >= 0)
{
    if (pPacket->stream_index == pStream->index)
    {
        if (ffmpeg.avcodec_send_packet(pCodecContext, pPacket) < 0)
        {
            ffmpeg.av_packet_unref(pPacket);
            ffmpeg.av_frame_unref(pDecodedFrame);
            continue;
        }

        if (ffmpeg.avcodec_receive_frame(pCodecContext, pDecodedFrame) < 0)
        {
            ffmpeg.av_frame_unref(pDecodedFrame);
            continue;
        }

        ffmpeg.av_packet_unref(pPacket);
        var src = &pDecodedFrame->data0;
        var dst = &pConvertedFrame->data0;
        var srcStride = pDecodedFrame->linesize;
        var dstStride = pConvertedFrame->linesize;
        ffmpeg.sws_scale(pConvertContext, src, srcStride, 0, height, dst, dstStride);

        var convertedFrameAddress = pConvertedFrame->data0;

        var imageBufferPtr = new IntPtr(convertedFrameAddress);
        ffmpeg.av_frame_unref(pDecodedFrame);
    }
}
while(ffmpeg.av_read_frame(pFormatContext,pPacket)>=0)
{
如果(pPacket->stream_index==pStream->index)
{
如果(ffmpeg.avcodec_发送_数据包(pCodecContext,pPacket)<0)
{
ffmpeg.av_包_unref(pPacket);
ffmpeg.av_frame_unref(pDecodedFrame);
继续;
}
if(ffmpeg.avcodec\u接收\u帧(pCodecContext,pDecodedFrame)<0)
{
ffmpeg.av_frame_unref(pDecodedFrame);
继续;
}
ffmpeg.av_包_unref(pPacket);
var src=&pDecodedFrame->data0;
var dst=&pConvertedFrame->data0;
var srcStride=pDecodedFrame->linesize;
var dststrade=pConvertedFrame->linesize;
sws_标度(pConvertContext,src,srcStride,0,height,dst,dstStride);
var convertedFrameAddress=pConvertedFrame->data0;
var imageBufferPtr=新的IntPtr(转换的帧地址);
ffmpeg.av_frame_unref(pDecodedFrame);
}
}
如何将图像从imageBufferPtr变量渲染到OpenGL纹理

如何将图像从imageBufferPtr变量渲染到OpenGL纹理

通过将其作为
data
参数传递到
glTex{Sub}Image2D