小编MaM*_*zav的帖子

使用WebRTC将数据与视频同步

我正在使用WebRTC从服务器向客户端浏览器发送视频(使用本机WebRTC APIMCU WebRTC像Kurento这样的服务器).

在将其发送给客户端之前,视频的每个帧都包含元数据(如字幕或任何其他应用内容).我正在寻找一种方法将这些元数据发送到客户端,使其保持同步(到实际呈现的时间).此外,我希望能够从客户端(通过Javascript)访问此数据.

我想到的一些选项:

  • 通过WebRTC DataChannel发送数据.但我不知道如何确保数据在每帧的基础上同步.但是我找不到一种方法来确保数据通道和视频通道发送的数据是同步的(再次,我希望获得单帧的精确级别).
  • 以某种方式手动将数据发送到客户端(WebRTC DataChannel,websockets等),其时间戳与视频的时间戳匹配.但是,即使Kurento或其他中间服务器保留视频中的时间戳信息,根据以下答案,没有应用方法从javascript获取视频时间戳: 如何使用webRTC Javascript API访问传出音频RTP时间戳在发送方和接收方的传入音频RTP时间戳?.我想过使用标准视频元素的timeupdate事件,但我不知道它是否适用于帧的精确级别,我不确定它在实时视频中的含义与WebRTC中的相同.
  • 手动发送数据并将其作为另一个应用程序附加到视频TextTrack.然后使用onenteronexit同步读取它:http://www.html5rocks.com/en/tutorials/track/basics/.它仍然需要精确的时间戳,我不知道如何知道什么是时间戳,以及Kurento是否按原样传递它们.
  • 使用WebRTC的统计API手动计算帧数(使用getstats),并希望此API提供的信息是准确的.

最好的方法是什么,以及如何解决我提到的问题?

编辑:需要具有适当帧的元数据的精确同步(在不超过单帧的分辨率下).

javascript video html5 video-streaming webrtc

17
推荐指数
1
解决办法
4315
查看次数

git checkout & git pull :执行时避免中间文件更改

我很惊讶我找不到任何相关信息...

简而言之,我的问题是是否有办法避免以下两个命令之间的中间文件更改,如果在以下两个命令之后文件内容与之前完全相同?

git checkout dev
git pull
Run Code Online (Sandbox Code Playgroud)

动机是(仅满足其中一个动机的解决方案也比没有好):

  • 我想避免我的 IDE 在不需要时重新加载文件(是的,VS 项目文件...)。
  • 避免隐藏未真正更改的文件。

当我使用远程源代码控制服务器将 origin/feature 合并到 origin/dev 后从功能分支返回到 master 时,这是一种非常常见的情况。

我希望git fetch origin dev之前的表演能够解决这个问题,但事实并非如此。我还发现了一些像这样的答案,其中讨论了将命令分组在一起以方便起见,但没有针对文件更改问题。

git branch pull checkout file

13
推荐指数
2
解决办法
2万
查看次数

WPF上的立体3D

我必须在WPF控件上显示立体3D图形.

我已经有了创建两个DirectX-9纹理的代码,每个眼睛都有一个纹理.

我想使用3D Vision(不是立体照片).

我考虑了以下方式将两张图片显示为3D立体声:

  1. 使用OpenGL或DirectX 11.1 Stereo API.
  2. 使用NvAPI_Stereo_SetActiveEye,如下所述:http://www.nvidia.com/docs/IO/40505/WP-05482-001_v01-final.pdf
  3. 使用此处所述的NVidia立体声签名: NV_STEREO_IMAGE_SIGNATURE和DirectX 10/11(nVidia 3D Vision)
  4. 尝试一对一地渲染两张图片,希望CompositionTarget.Rendering不要丢失太多的VSyncs,并在单个VSyncs丢失时进行同步.此外,通过一些不可见的控制来打开3D视觉发射器,渲染虚构的立体图像.
  5. 渲染3D场景并让NVidia驱动程序自动使其立体化.
  6. 渲染到一些真正的Windows控件(如Winform控件),并使用WPF主机(如WinFormHost)来显示内容.

上述方法存在的问题是:

1-3:前三种方式中的一种似乎是直接的解决方案,但在WPF中是不可能的,因为我无法创建设备/上下文并控制图片的呈现方式.

4:使用CompositionTarget.Rendering我只得到约60Hz而不是120Hz.我想问题是EndScene()被调用两次 - 一次在我的渲染场景中,另一次在WPF渲染机制中,但我不确定.无论如何即使它会起作用 - 该解决方案似乎不稳定.

5:在我的情况下渲染3D场景是不可能的,因为某些技术原因迫使我自己渲染两只眼睛的两张图像.

6:WinFormHost及其朋友的问题是它不是WPF控件,并且在WPF控件方面有意外行为.例如,WinForm控件将隐藏逻辑树上较高的WPF控件,无法使用RotateTransform等旋转.

现在我选择了最后一个解决方案 - 使用WinFormHost.有没有人知道这个坚不可摧的墙的解决方案,在真正的WPF控制中制作立体3D?

directx 3d wpf stereoscopy stereo-3d

5
推荐指数
0
解决办法
566
查看次数

是否有可能双倍比浮动快x2?

我进行了一些基准测试,以比较双打和浮动性能.看到双打比浮球要快得多,我感到非常惊讶.

我看到了一些关于这方面的讨论,例如:

使用比浮动更快的双倍?

是否比c#中的浮点数快一倍?

他们中的大多数人表示,由于双精度优化等原因,双重和浮动性能可能相似.但是当我使用双打时我看到了x2的性能提升 !! 这怎么可能?最糟糕的是,我使用的是32位机器,根据一些帖子的说法,这些机器预计会更好地用于花车......

我使用C#来精确地检查它,但我发现类似的C++实现具有类似的行为.

代码我用来检查它:

static void Main(string[] args)
{
  double[,] doubles = new double[64, 64];
  float[,] floats = new float[64, 64];

  System.Diagnostics.Stopwatch s = new System.Diagnostics.Stopwatch();

  s.Restart();
  CalcDoubles(doubles);
  s.Stop();
  long doubleTime = s.ElapsedMilliseconds;

  s.Restart();
  CalcFloats(floats);
  s.Stop();
  long floatTime = s.ElapsedMilliseconds;

  Console.WriteLine("Doubles time: " + doubleTime + " ms");
  Console.WriteLine("Floats time: " + floatTime + " ms");
}

private static void CalcDoubles(double[,] arr)
{
  unsafe
  {
    fixed (double* p = arr)
    {
      for …
Run Code Online (Sandbox Code Playgroud)

c# performance processor intel

5
推荐指数
2
解决办法
760
查看次数

使用 ffmpeg 从 mpegts 文件中提取特定流的字节

我有一个带有单个程序的 mpeg-ts 文件。该节目由一些流组成——一个视频流和一些元数据流。

我想将特定流提取到单独的文件中。然而,元数据是使用 ffmpeg 不知道的编解码器进行编码的。我并不真正关心这个 - 我只想将数据提取为字节,而不需要 mpeg-ts 容器标头。我尝试使用编解码器“复制”但没有成功。

我尝试了以下方法:

    ffmpeg -i video.ts -map 0:1 -codec copy stream.txt
Run Code Online (Sandbox Code Playgroud)

但 ffmpeg 说:

    Unable to find a suitable output format for stream.txt
Run Code Online (Sandbox Code Playgroud)

上面的错误只是因为 ffmpeg 不知道如何输出文本文件。所以我尝试使用“rawvideo”容器输出:

    ffmpeg -i video.ts -map 0:1 -codec copy -f rawvideo stream.txt
Run Code Online (Sandbox Code Playgroud)

但:

    Cannot map stream #0:1 - unsupported type
Run Code Online (Sandbox Code Playgroud)

为了确保我可以提取未知编解码器的内容,我尝试了以下操作:

    ffmpeg -i video.ts -map 0:1 -codec copy stream.ts
Run Code Online (Sandbox Code Playgroud)

但再说一遍:

    Cannot map stream #0:1 - unsupported type
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 我可以提取未知编解码器流的字节流吗?如何?
  • 如何在没有任何容器的情况下输出字节流?我应该使用原始视频吗?

video metadata ffmpeg stream mpeg2-ts

4
推荐指数
1
解决办法
3441
查看次数