我正在开发一个网络组件,其中服务器提供纹理并将其发送到FFmpeg进行编码(h264_qsv),并通过网络发送。 客户端接收流(可能是mp4),再次使用FFmpeg对其进行解码并将其显示在纹理上。
目前这种方法工作非常缓慢,因为我在将纹理编码到mp4文件(也保存到磁盘)之前将纹理保存到磁盘,而在客户端,我将.png纹理保存到磁盘后解码它以便我可以在Unity中使用它。
服务器端FFmpeg流程目前由process.StartInfo.Arguments = @" -y -i testimg.png -c:v h264_qsv -q 5 -look_ahead 0 -preset:v faster -crf 0 test.qsv.mp4";
启动,客户端启用process.StartInfo.Arguments = @" -y -i test.qsv.mp4 output.png";
由于这需要非常快(至少30 fps)和实时,我需要将纹理直接传递给FFmpeg进程。在客户端,我需要直接将解码数据传输到显示的纹理(与保存它然后从磁盘读取相反)。
几天的研究表明,FFmpeg支持各种流水线选项,包括使用 bmp_pipe (管道bmp序列), bin (二进制文本)等数据格式, 数据(原始数据)和 image2pipe (管道图像2序列)但是有关如何使用这些选项的文档和示例非常缺乏。
请帮帮我:我应该使用哪种格式(以及如何使用)?