【发布时间】:2014-06-10 12:48:59
【问题描述】:
我一直在检查将实时帧转换为视频。我发现 (NReco.VideoConverter) ffmpeg lib 将实时帧转换为视频,但问题是将每个帧写入 ConvertLiveMediaTask (异步实时媒体任务转换)需要时间。
我有一个从 IpCamera 提供(原始)帧 (1920x1080) (25fps) 的事件。每当我得到框架时,我都会执行以下操作
//Image availbale event fired
//...
//...
// Record video is true
if(record)
{
//////////////############# Time taking part ##############//////////////////////
var bd = frameBmp.LockBits(new Rectangle(0, 0, frameBmp.Width, frameBmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
var buf = new byte[bd.Stride * frameBmp.Height];
Marshal.Copy(bd.Scan0, buf, 0, buf.Length);
// write to ConvertLiveMediaTask
convertLiveMediaTask.Write(buf, 0, buf.Length); // ffMpegTask
frameBmp.UnlockBits(bd);
//////////////////////////////////////////////////////////////////////////////////
}
由于上述部分花费了很多时间,我正在失去框架。
//Stop recording
convertLiveMediaTask.Stop(); //ffMpegTask
停止录制,这部分我使用了 BackgroundWorker,因为将媒体保存到文件需要太多时间。
我的问题是如何以更快的方式将帧写入 ConvertLiveMediaTask?有没有可能在后台写它?
请给我建议。
【问题讨论】:
标签: c# ffmpeg live background-process video-recording