小编Rud*_*lis的帖子

Razor无法删除动态模板DLL文件并删除文件系统

从Razor模板引擎3.3.0升级到3.6.1后,我遇到了预编译模板的问题 - 即使是在页面上给出的琐碎样本,也会发生这样的事情:

using System;
using RazorEngine;
using RazorEngine.Templating;
using System.Diagnostics;

namespace RazorTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string template = "Hello @Model.Name, welcome to RazorEngine!";
            Debug.WriteLine("Before Compile()");
            var result = Engine.Razor.RunCompile(template, "templateKey", null, new { Name = "World" });
            Debug.WriteLine("After Compile()");
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

System.UnauthorizedAccessException尝试删除生成的dll文件时抛出退出.调试输出很好地显示了一切:

Before Compile()
'RazorTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\user\Documents\Visual Studio 2010\Projects\RazorTest\RazorTest\bin\Debug\System.Web.Razor.dll'
'RazorTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\user\AppData\Local\Temp\RazorEngine_zzxr14ak.ysb\CompiledRazorTemplates.Dynamic.RazorEngine_dc2066212315402592a6d2d155476c19.dll'
'RazorTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'Anonymously Hosted DynamicMethods Assembly'
'RazorTest.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Dynamic\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Dynamic.dll'
A first …
Run Code Online (Sandbox Code Playgroud)

c# razorengine

5
推荐指数
1
解决办法
4071
查看次数

如何在实时WebM流中打包框架?

我正在通过libvpx使用VP9对实时流进行编码,并希望将其流式传输到HTML5播放器.我已经阅读了Matroska规范W3C WebM字节流格式,并检查了libvpx中vpxenc工具生成的几个WebM文件.一切似乎都很好,但是我找不到关于如何在W3C规范中描述的媒体段内打包编码视频帧的任何严格规则或指南.

据我所知,我必须发出包含内部有块元素的簇的媒体段.根据我的理解,我可以为编码器获得的每个帧使用一个简单的块元素,因为它有一个时间戳.但是如何组织集群?对我来说,使用单个简单的块条目为每个帧发出单个集群以减少缓冲和延迟是有意义的.这种方法是否被认为是正常的,或者这样做有什么缺点,我应该缓冲一段时间间隔,然后发出一个包含多个简单块元素的集群,覆盖缓冲时间段?

UPDATE

所以我实现了所描述的方法(用单个简单的块条目发射集群),视频似乎滞后很多,所以可能这不是可行的方法.

live-video webm vp9

5
推荐指数
1
解决办法
1108
查看次数

我在类型 1 的 NAL 单元内进行切片

我最近遇到了一个有趣的 H.264 比特流,想了解它在规范方面是否有效。

假设有一个比特流仅由类型 1 的 NAL 单元(非 IDR 图片的编码切片)组成,但在这些单元内部有类型 7 的切片(I 切片)。看看规范,这似乎是有效的,但到目前为止,我一直相信我应该始终尝试期望至少一个类型 5 的 NAL 单元(IDR 图片的编码切片)开始解码,而这表明我还应该检查 I 切片的非 IDR 图片。那是对的吗?不使用 IDR 图片并将 I 切片放入非 IDR 图片内是否有任何理由?

h.264

5
推荐指数
1
解决办法
1616
查看次数

gcc 7.2.0无法识别std :: expf和std :: logf

似乎gcc(尝试7.2.0和5.4.0)没有std :: expfstd :: logf-请参阅coliru 示例。由于cppreference表示它们是在C ++ 11中添加的,我是否缺少某些gcc特定宏,或者它们在gcc中总体上还是缺失的?

gcc c++11

5
推荐指数
1
解决办法
260
查看次数

使用utf-32解析器处理Boost.Spirit中的utf-8

我有一个类似的问题,比如如何使用boost :: spirit来解析UTF-8?以及如何使用boost :: spirit匹配unicode字符?但这些都没有解决我面临的问题.我有一个std::stringUTF-8字符,我用它u8_to_u32_iterator来包装std::string和使用这样的unicode终端:

BOOST_NETWORK_INLINE void parse_headers(std::string const & input, std::vector<request_header_narrow> & container) {
        using namespace boost::spirit::qi;
        u8_to_u32_iterator<std::string::const_iterator> begin(input.begin()), end(input.end());
        std::vector<request_header_narrow_utf8_wrapper> wrapper_container;
        parse(
            begin, end,
            *(
                +(alnum|(punct-':'))
                >> lit(": ")
                >> +((unicode::alnum|space|punct) - '\r' - '\n')
                >> lit("\r\n")
            )
            >> lit("\r\n")
            , wrapper_container
            );
        BOOST_FOREACH(request_header_narrow_utf8_wrapper header_wrapper, wrapper_container)
        {
            request_header_narrow header;
            u32_to_u8_iterator<request_header_narrow_utf8_wrapper::string_type::iterator> name_begin(header_wrapper.name.begin()),
                                                                                          name_end(header_wrapper.name.end()),
                                                                                          value_begin(header_wrapper.value.begin()),
                                                                                          value_end(header_wrapper.value.end());
            for(; name_begin != name_end; ++name_begin)
                header.name += *name_begin;
            for(; value_begin != value_end; …
Run Code Online (Sandbox Code Playgroud)

c++ boost utf-8 boost-spirit

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

H264 NAL单位前缀

我需要对H264 NAL单元分隔符前缀(00 00 00 0100 00 01)做一些澄清,我使用Intel Media SDK生成H264并将其打包到RTP中.问题是,到目前为止,我只关注00 00 00 01单位分隔符,基本上只能在比特流中找到AUD,SPS,PPS和SEI单位.看看内存,我看到在SEI之后有一个字节序列00 00 01 25可能是IDR单元的开始,但是由于缺少零字节,我的搜索算法没有检测到它.任何人都可以澄清00 00 00 0100 00 01前缀之间的区别吗?看看Chromium代码,看起来第一个单元以及AUD,SPS,PPS和SEI都有一个额外的零:

if (first_nal_in_this_access_unit ||
    IsAccessUnitBoundaryNal(nal_unit_type)) {
    output_size += 1;  // Extra zero_byte for these nal units
    first_nal_in_this_access_unit = false;
}

...

static bool IsAccessUnitBoundaryNal(int nal_unit_type) {
    // Check if this packet marks access unit boundary by checking the
    // packet type.
    if (nal_unit_type == 6 ||  // …
Run Code Online (Sandbox Code Playgroud)

rtp video-encoding video-streaming h.264

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

CPU到GPU内存传输 - cudaMemcpy()vs Direct3D动态资源与Map()

我有一个实时视频流管道,可以对H.264执行RGB32帧编码.我的目标是NVIDIA硬件,因此我计划使用CUDA执行从RGB32到NV12的色彩空间转换.我查找了内核执行类似任务的示例,一切看起来都很好.然而,由于很多人提到数据传输速度是CPU到GPU通信的最关键点,我想知道是否有人有经验,这是将RGB32数据提供给CUDA内核的更好方法:

  • 使用cudaMemcpy()(至少这个主题表明它cudaMemcpy()比OS图形堆栈表现更好
  • 使用向cuda注册并通过用户空间代码更新的动态Direct3D11资源 Map()

如果有人有这方面的经验,那么我很高兴听到它,否则 - 基准测试是:)

cuda nvidia direct3d11

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

GCD - 串行队列是否需要"NSLock"或内存屏障才能同步工作?

我阅读了关于GCD队列的Apple文档,并开始想知道如果我想修改一个NSMutableArray在串行队列中不是线程安全的类型的实例成员会发生什么?串行队列将保证我连续执行操作,但我仍然觉得我需要执行一个@syncrhonized块或其他技术来强制内存屏障,因为据我所知,我的串行队列上的任务可以被调用不同的线程.那是对的吗?这是一个简单的例子:

@interface Foo : NSObject

-(void)addNumber:(NSNumber*)number;
-(void)printNumbers;
-(void)clearNumbers;

@end

@implementation Foo
{
   dispatch_queue_t _queue;
   NSMutableArray<NSNumber*>* _numbers;
}

-(instancetype)init
{
   if (self = [super init])
   {
       _queue = dispatch_queue_create(NULL, NULL);
       _numbers = [NSMutableArray array];
   }
   return self;
}

-(void)addNumber:(NSNumber*)number
{
   dispatch_async(_queue,
   ^{
       [_numbers addObject:number];
   });
}

-(void)printNumbers
{
   dispatch_async(_queue,
   ^{
       for (NSNumber* number in _numbers)
       {
           NSLog(@“%@“, number);
       }
   });
}

-(void)clearNumbers
{
   dispatch_async(_queue,
   ^{
       _numbers = [NSMutableArray array];
   });
}
@end;
Run Code Online (Sandbox Code Playgroud)

据我所知,如果我从任意线程调用成员方法,我可能会遇到内存问题?或者GCD在引擎盖下提供了一些保证,为什么我不需要强制记忆障碍?看看这些例子,我没有在任何地方找到这样的结构,但是从C++开始,在锁定下触摸成员变量是有意义的.

objective-c grand-central-dispatch

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

标准的哪一部分确定就地成员与初始化程序列表的优先级?

我只是制作了一个示例,从我个人的角度来看,该示例不应编译或至少发出警告,但Visual Studio 2017不给出任何警告。示例如下:

#include <stdexcept>

struct Foo {
    Foo(int i) { throw std::runtime_error("Oh no:("); }
    Foo(float f) {}
};

struct Bar {
    Bar() {}
};

struct Baz {
    Baz() : foo(5.0f) {}

    Bar bar;
    Foo foo = Foo(3);
    Bar bar2;
};

int main()
{
    Baz baz;
}
Run Code Online (Sandbox Code Playgroud)

以我的观点(但我不是语言律师),foo的两个初始化(就地与初始化列表)是模棱两可的。那么在这种情况下有什么规则?

c++ constructor initialization member-initialization language-lawyer

3
推荐指数
1
解决办法
68
查看次数

使用相同的套接字发送和接收 UDP 多播数据包

我找不到一个工作示例,所以我将发布一个问题(让我们看看是否可以将其简化为 MVP 代码示例)。所以,我需要做 mdns 查询,我可以使用两个套接字(一个用于发送/第二个用于接收),但到目前为止我还无法使其与单个套接字一起工作。

所以我正在执行的步骤是:

枚举主机上的所有接口地址。然后对于每个主机:

  1. 创建非阻塞 UDP 套接字
  2. bind() 到接口地址:5353 或多播组地址(这些都会导致读取或写入失败)
  3. 将 IP_MULTICAST_IF 设置为本地接口
  4. IP_ADD_MEMBERSHIP 到多播组
  5. 在 kqueue 中添加用于读/写的套接字

因此,根据我在第 2 步中执行的操作,读取或写入失败:

  1. 如果我将套接字绑定到多播组,我会从 kqueue 收到读取通知并可以读取数据包,但是当我从 kqueue 收到写入通知并尝试写入时,它会失败并显示 errno 49
  2. 如果我将套接字绑定到接口地址,我可以发送数据包,但没有读取通知从 kqueue 到达

那么我需要绑定到哪个地址呢?另外,由于IP_ADD_MEMBERSHIP参数ip_mreq有接口字段,我真的需要IP_MULTICAST_IF吗?

c sockets posix multicast multicastsocket

3
推荐指数
1
解决办法
806
查看次数