This commit is contained in:
lxmou666 2020-12-30 23:41:28 +08:00
parent bc46d869a0
commit b36c183e2d
3 changed files with 29 additions and 24 deletions

View File

@ -16,12 +16,12 @@
<PackageReference Include="CommonServiceLocator" Version="2.0.5" /> <PackageReference Include="CommonServiceLocator" Version="2.0.5" />
<PackageReference Include="MvvmLightLibs" Version="5.4.1.1" /> <PackageReference Include="MvvmLightLibs" Version="5.4.1.1" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="OpenCvSharp4.runtime.win" Version="4.5.1.20201226" /> <PackageReference Include="OpenCvSharp4.runtime.win" Version="4.5.1.20201229" />
<PackageReference Include="OpenCvSharp4.WpfExtensions" Version="4.5.1.20201226" /> <PackageReference Include="OpenCvSharp4.WpfExtensions" Version="4.5.1.20201229" />
<PackageReference Include="zlib.net" Version="1.0.4" /> <PackageReference Include="zlib.net" Version="1.0.4" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' != 'net45'"> <ItemGroup Condition="'$(TargetFramework)' != 'net45'">
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.7.0" /> <PackageReference Include="System.Text.Encoding.CodePages" Version="5.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Update="Views\Window2.xaml.cs"> <Compile Update="Views\Window2.xaml.cs">
@ -52,7 +52,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'"> <ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
<PackageReference Include="OpenCvSharp4"> <PackageReference Include="OpenCvSharp4">
<Version>4.5.1.20201226</Version> <Version>4.5.1.20201229</Version>
</PackageReference> </PackageReference>
</ItemGroup> </ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent"> <Target Name="PostBuild" AfterTargets="PostBuildEvent">

View File

@ -272,10 +272,10 @@ namespace JianGongYun.TRTC
public static void VedioRecordTask(TXLiteAVVideoView view, TRTCVideoStreamType streamType) public static void VedioRecordTask(TXLiteAVVideoView view, TRTCVideoStreamType streamType)
{ {
var end = false; var end = false;
ConcurrentQueue<Bitmap> bitmaps = new ConcurrentQueue<Bitmap>(); ConcurrentQueue<Mat> bitmaps = new ConcurrentQueue<Mat>();
view.OnRenderVideoFrameHandler += (b) => view.OnRenderVideoFrameHandler += (b) =>
{ {
bitmaps.Enqueue(b.ToBitmap()); bitmaps.Enqueue(b.ToMat());
}; };
view.OnViewRemove += () => view.OnViewRemove += () =>
{ {
@ -288,7 +288,6 @@ namespace JianGongYun.TRTC
var imgTemp = Path.Combine(_recoderDir, $"{streamType}.png"); var imgTemp = Path.Combine(_recoderDir, $"{streamType}.png");
var videoFile = Path.Combine(_recoderDir, $"{Util.TimeStr()}_{streamType}.avi"); var videoFile = Path.Combine(_recoderDir, $"{Util.TimeStr()}_{streamType}.avi");
VideoWriter vw = new VideoWriter(); VideoWriter vw = new VideoWriter();
Mat mat = default;
bool videoWriterInit = false; bool videoWriterInit = false;
while (!end || bitmaps.Count > 0) while (!end || bitmaps.Count > 0)
{ {
@ -297,26 +296,26 @@ namespace JianGongYun.TRTC
Thread.Sleep(100); Thread.Sleep(100);
continue; continue;
} }
if (bitmaps.TryDequeue(out var bitmap)) if (bitmaps.TryDequeue(out var mat))
{ {
bitmap.Save(imgTemp, System.Drawing.Imaging.ImageFormat.Png); //mat.SaveImage(imgTemp);
bitmap.Dispose(); //mat.Dispose();
mat = Cv2.ImRead(imgTemp, ImreadModes.AnyColor); //mat = Cv2.ImRead(imgTemp, ImreadModes.AnyColor);
Cv2.ImShow(streamType.ToString(), mat); //Cv2.ImShow(streamType.ToString(), mat);
Cv2.WaitKey(1); //Cv2.WaitKey(1);
if (!videoWriterInit) if (!videoWriterInit)
{ {
vw.Open(videoFile, FourCC.H264, settingWindowViewModel.EncParams.videoFps, mat.Size()); vw.Open(videoFile, FourCC.H264, settingWindowViewModel.EncParams.videoFps, mat.Size());
videoWriterInit = true; videoWriterInit = true;
} }
vw.Write(mat); vw.Write(mat);
mat.Dispose();
} }
else else
{ {
Thread.Sleep(100); Thread.Sleep(100);
} }
} }
mat?.Dispose();
vw?.Release(); vw?.Release();
vw?.Dispose(); vw?.Dispose();
if (File.Exists(imgTemp)) if (File.Exists(imgTemp))

View File

@ -17,18 +17,12 @@ namespace JianGongYun.TRTC.Utils
/// <returns></returns> /// <returns></returns>
public static Mat ToMat(this WriteableBitmap writeableBitmap) public static Mat ToMat(this WriteableBitmap writeableBitmap)
{ {
using (MemoryStream outStream = new MemoryStream()) using (var bmp = writeableBitmap.ToBitmap())
{
BitmapEncoder enc = new PngBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(writeableBitmap));
enc.Save(outStream);
using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(outStream))
{ {
var mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bmp); var mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bmp);
return mat; return mat;
} }
} }
}
/// <summary> /// <summary>
/// WriteableBitmap转Bitmap /// WriteableBitmap转Bitmap
/// </summary> /// </summary>
@ -38,11 +32,23 @@ namespace JianGongYun.TRTC.Utils
{ {
using (MemoryStream outStream = new MemoryStream()) using (MemoryStream outStream = new MemoryStream())
{ {
BitmapEncoder enc = new PngBitmapEncoder(); //System.Windows.Media.Imaging.WmpBitmapEncoder
BitmapEncoder enc = new BmpBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(writeableBitmap)); enc.Frames.Add(BitmapFrame.Create(writeableBitmap));
enc.Save(outStream); enc.Save(outStream);
return new System.Drawing.Bitmap(outStream); return new System.Drawing.Bitmap(outStream);
} }
} }
public static string ToFile(this WriteableBitmap writeableBitmap, string fileName)
{
using (var file = File.Create(fileName))
{
BitmapEncoder enc = new BmpBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(writeableBitmap));
enc.Save(file);
return fileName;
}
}
} }
} }