Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
V
VIZ.Framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
刘龙飞
VIZ.Framework
Commits
f1410da2
Commit
f1410da2
authored
Jan 12, 2023
by
liulongfei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
NDIStream优化
parent
7cfedc1e
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
25 additions
and
37 deletions
+25
-37
05-Lib/NDILibDotNet2.dll
+0
-0
05-Lib/Processing.NDI.Lib.x64.dll
+0
-0
05-Lib/Processing.NDI.Lib.x86.dll
+0
-0
VIZ.Framework.Common/VIZ.Framework.Common.csproj
+2
-1
VIZ.Framework.Common/VideoControl/Stream/NDI/NDIStream.cs
+0
-18
VIZ.Framework.Common/VideoControl/Stream/NDI/Task/NDIStreamRecvVideoTask.cs
+17
-18
VIZ.Framework.Common/VideoControl/Stream/VideoStreamTaskBase.cs
+6
-0
No files found.
05-Lib/NDILibDotNet2.dll
View file @
f1410da2
No preview for this file type
05-Lib/Processing.NDI.Lib.x64.dll
View file @
f1410da2
No preview for this file type
05-Lib/Processing.NDI.Lib.x86.dll
View file @
f1410da2
No preview for this file type
VIZ.Framework.Common/VIZ.Framework.Common.csproj
View file @
f1410da2
...
...
@@ -57,7 +57,8 @@
<Reference Include="log4net, Version=2.0.14.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.14\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="NDILibDotNet2">
<Reference Include="NDILibDotNet2, Version=1.0.0.0, Culture=neutral, processorArchitecture=AMD64">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\05-Lib\NDILibDotNet2.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
...
...
VIZ.Framework.Common/VideoControl/Stream/NDI/NDIStream.cs
View file @
f1410da2
...
...
@@ -83,11 +83,6 @@ namespace VIZ.Framework.Common
/// </summary>
internal
IntPtr
RecvInstancePtr
;
/// <summary>
/// 接收NDI流同步信息实例句柄
/// </summary>
internal
IntPtr
RecvSyncInstancePtr
;
/* ========================================================================================================= */
/* === Field === */
/* ========================================================================================================= */
...
...
@@ -154,12 +149,6 @@ namespace VIZ.Framework.Common
NDIlib
.
recv_destroy
(
this
.
RecvInstancePtr
);
this
.
RecvInstancePtr
=
IntPtr
.
Zero
;
}
// 释放NDI流同步接收实例句柄
if
(
this
.
RecvSyncInstancePtr
!=
IntPtr
.
Zero
)
{
NDIlib
.
framesync_destroy
(
this
.
RecvSyncInstancePtr
);
this
.
RecvSyncInstancePtr
=
IntPtr
.
Zero
;
}
}
/// <summary>
...
...
@@ -196,12 +185,6 @@ namespace VIZ.Framework.Common
NDIlib
.
recv_destroy
(
this
.
RecvInstancePtr
);
this
.
RecvInstancePtr
=
IntPtr
.
Zero
;
}
// 释放NDI流同步接收实例句柄
if
(
this
.
RecvSyncInstancePtr
!=
IntPtr
.
Zero
)
{
NDIlib
.
framesync_destroy
(
this
.
RecvSyncInstancePtr
);
this
.
RecvSyncInstancePtr
=
IntPtr
.
Zero
;
}
// -------------------------------------------------------------------------------
// 初始化
...
...
@@ -227,7 +210,6 @@ namespace VIZ.Framework.Common
recvCreateDesc
.
p_ndi_recv_name
=
UTF
.
StringToUtf8
(
this
.
LocalRecevierName
);
this
.
RecvInstancePtr
=
NDIlib
.
recv_create_v3
(
ref
recvCreateDesc
);
this
.
RecvSyncInstancePtr
=
NDIlib
.
framesync_create
(
this
.
RecvInstancePtr
);
// -------------------------------------------------------------------------------
// 切换成功
...
...
VIZ.Framework.Common/VideoControl/Stream/NDI/Task/NDIStreamRecvVideoTask.cs
View file @
f1410da2
...
...
@@ -32,9 +32,9 @@ namespace VIZ.Framework.Common
public
override
NDIStreamTaskNames
Name
=>
NDIStreamTaskNames
.
RECV_VIDEO
;
/// <summary>
///
之前的视频帧时间戳
///
线程优先级
/// </summary>
p
rivate
long
old_video_timestamp
=
0
;
p
ublic
override
ThreadPriority
ThreadPriority
=>
ThreadPriority
.
Highest
;
/// <summary>
/// 执行
...
...
@@ -43,9 +43,9 @@ namespace VIZ.Framework.Common
{
while
(
this
.
IsStarted
)
{
if
(
this
.
Stream
.
RecvInstancePtr
==
IntPtr
.
Zero
||
this
.
Stream
.
RecvSyncInstancePtr
==
IntPtr
.
Zero
)
if
(
this
.
Stream
.
RecvInstancePtr
==
IntPtr
.
Zero
)
{
Thread
.
Sleep
(
1
);
Thread
.
Sleep
(
1
000
);
continue
;
}
...
...
@@ -62,26 +62,25 @@ namespace VIZ.Framework.Common
{
// 获取NDI视频帧
NDIlib
.
video_frame_v2_t
frame
=
new
NDIlib
.
video_frame_v2_t
();
NDIlib
.
framesync_capture_video
(
this
.
Stream
.
RecvSyncInstancePtr
,
ref
frame
,
NDIlib
.
frame_format_type_e
.
frame_format_type_progressive
);
NDIlib
.
audio_frame_v2_t
audio
=
new
NDIlib
.
audio_frame_v2_t
();
NDIlib
.
metadata_frame_t
metadata
=
new
NDIlib
.
metadata_frame_t
();
NDIlib
.
frame_type_e
type
=
NDIlib
.
recv_capture_v2
(
this
.
Stream
.
RecvInstancePtr
,
ref
frame
,
ref
audio
,
ref
metadata
,
1000
);
// 如果该帧的时间戳与之前的帧时间戳一致
// 那么认为没有获取到新的一帧画面
if
(
this
.
old_video_timestamp
==
frame
.
timestamp
)
if
(
type
!=
NDIlib
.
frame_type_e
.
frame_type_video
)
{
NDIlib
.
framesync_free_video
(
this
.
Stream
.
RecvSyncInstancePtr
,
ref
frame
);
Thread
.
Sleep
(
10
);
NDIlib
.
recv_free_video_v2
(
this
.
Stream
.
RecvInstancePtr
,
ref
frame
);
NDIlib
.
recv_free_audio_v2
(
this
.
Stream
.
RecvInstancePtr
,
ref
audio
);
NDIlib
.
recv_free_metadata
(
this
.
Stream
.
RecvInstancePtr
,
ref
metadata
);
return
;
}
// 否则
// 获取到新的一帧画面
this
.
old_video_timestamp
=
frame
.
timestamp
;
// 如果新的一帧画面的时间戳为0 || 帧没有数据
if
(
frame
.
timestamp
==
0
||
frame
.
p_data
==
IntPtr
.
Zero
||
frame
.
p_data
==
null
)
{
NDIlib
.
framesync_free_video
(
this
.
Stream
.
RecvSyncInstancePtr
,
ref
frame
);
Thread
.
Sleep
(
10
);
NDIlib
.
recv_free_video_v2
(
this
.
Stream
.
RecvInstancePtr
,
ref
frame
);
NDIlib
.
recv_free_audio_v2
(
this
.
Stream
.
RecvInstancePtr
,
ref
audio
);
NDIlib
.
recv_free_metadata
(
this
.
Stream
.
RecvInstancePtr
,
ref
metadata
);
return
;
}
...
...
@@ -108,9 +107,9 @@ namespace VIZ.Framework.Common
this
.
Stream
.
VideoFrameQueue
.
Enqueue
(
videoFrame
);
// 尝试释放帧数据
NDIlib
.
framesync_free_video
(
this
.
Stream
.
RecvSync
InstancePtr
,
ref
frame
);
Thread
.
Sleep
(
10
);
NDIlib
.
recv_free_video_v2
(
this
.
Stream
.
Recv
InstancePtr
,
ref
frame
);
NDIlib
.
recv_free_audio_v2
(
this
.
Stream
.
RecvInstancePtr
,
ref
audio
);
NDIlib
.
recv_free_metadata
(
this
.
Stream
.
RecvInstancePtr
,
ref
metadata
);
}
}
}
VIZ.Framework.Common/VideoControl/Stream/VideoStreamTaskBase.cs
View file @
f1410da2
...
...
@@ -18,6 +18,11 @@ namespace VIZ.Framework.Common
public
bool
IsStarted
{
get
;
set
;
}
/// <summary>
/// 线程优先级
/// </summary>
public
virtual
ThreadPriority
ThreadPriority
{
get
;
}
=
ThreadPriority
.
Normal
;
/// <summary>
/// 任务线程
/// </summary>
private
Thread
Thread
;
...
...
@@ -34,6 +39,7 @@ namespace VIZ.Framework.Common
this
.
Thread
=
new
Thread
(
this
.
Execute
);
this
.
Thread
.
IsBackground
=
true
;
this
.
Thread
.
Priority
=
this
.
ThreadPriority
;
this
.
Thread
.
Start
();
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment