小编Ala*_*ght的帖子

在.net中使用FFmpeg?

所以我知道这是一个相当大的挑战,但我想使用FFmpeg库在c#中编写一个基本的电影播放器​​/转换器.但是,我需要克服的第一个障碍是将FFmpeg库包装在c#中.我已经下载了ffmpeg但无法在Windows上编译它,所以我为我下载了一个预编译版本.太棒了.然后我开始寻找C#包装器.

我环顾四周,发现了一些包装器,如SharpFFmpeg(http://sourceforge.net/projects/sharpffmpeg/)和ffmpeg-sharp(http://code.google.com/p/ffmpeg-sharp/).首先,我想使用ffmpeg-sharp作为其LGPL而SharpFFmpeg是GPL.但是,它有很多编译错误.事实证明它是为单声道编译器编写的,我尝试用单声道编译它但无法弄清楚如何.然后我开始自己手动修复编译器错误,但遇到了一些可怕的错误,并认为我最好不要单独留下它们.所以我放弃了ffmpeg-sharp.

然后我看着SharpFFmpeg,它看起来像我想要的,所有P/Invoked函数.不过它的GPL?AVCodec.cs和AVFormat.cs文件看起来像avcodec.c和avformat.c的端口,我估计我可以移植自己?然后不必担心许可.

但是我想在开始编码之前做到这一点.我是不是该:

  1. 编写我自己的C++库以与ffmpeg交互,然后让我的C#程序与C++库通信以播放/转换视频等.

要么

  1. 通过使用大量的DllImports将端口avcodec.h和avformat.h(这就是我需要的全部吗?)到c#中并完全用C#编写?

首先要考虑的是我在C++方面并不擅长,因为我很少使用它,但我知道它足以绕过它.我认为#1的原因可能是更好的选择,因为大多数FFmpeg教程都是用C++编写的,而且我对内存管理的控制也比我在c#中做的要多.

你怎么看?您是否也碰巧使用FFmpeg有任何有用的链接(也许是教程)?

c# video ffmpeg

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

运行Inno Setup Installer时如何修改PATH环境变量?

Inno Setup允许您通过[Registry]部分设置环境变量(通过设置对应于环境变量的注册表项)

但是,有时您不只是想设置一个环境变量.通常,你想修改它.例如:安装时,可能需要在PATH环境变量中添加/删除目录.

如何从InnoSetup中修改PATH环境变量?

inno-setup environment-variables

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

有没有更好的方法将DateTime修剪为特定的精度?

将DateTime对象修剪为特定精度的最佳方法是什么?例如,如果我的DateTime值为'2008-09-29 09:41:43',但我只想要精确到分钟,有没有更好的方法来做到这一点?

private static DateTime TrimDateToMinute(DateTime date)
{
    return new DateTime(
        date.Year, 
        date.Month, 
        date.Day, 
        date.Hour, 
        date.Minute, 
        0);
}
Run Code Online (Sandbox Code Playgroud)

我真正想要的是让它变量,以便我可以将其精度设置为秒,分钟,小时或日.

.net c# datetime

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

如何在java中销毁一个对象?

我在接受以下选项的采访中遇到了这个问题:

如何在java中销毁对象?

a. System.gc();  
b. Runtime.getRuntime.gc();  
c. object.delete();  
d. object.finalize();  
e. Java performs gc by itself, no need to do it manually.
Run Code Online (Sandbox Code Playgroud)
  1. 答案应该是e?

  2. 如果e不存在怎么办?然后 ?显然c不是答案.a和b将为整个应用程序执行gc(问题需要一个对象).我认为这是因为在gc之前调用finalize()(但是在调用gc的最终化之后是否有必要?)或者我错了?我必须在那里回答这个问题吗?

java garbage-collection finalize

42
推荐指数
5
解决办法
12万
查看次数

如何强制取消任务?

假设,有一项任务包含以下约:

Task someTask = new Task(() => {

  while(!IsCancellationRequested) {

    Do_something_over_a_long_period_of_time();
    token.ThrowIfCancellationRequested();

    Do_something_over_a_long_period_of_time();
    token.ThrowIfCancellationRequested();

    Do_something_over_a_long_period_of_time();
    token.ThrowIfCancellationRequested();
  }
});
someTask.Start();
Run Code Online (Sandbox Code Playgroud)

并且有非常不耐烦的用户.他们渴望立即终止我的申请.他们不想等待长时间的行动.

我以前使用Thread该类,并能够通过调用Abort()命令立即中止我的所有线程.

我如何立即中止我的任务?

谢谢.

c# multithreading task task-parallel-library

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

在方法返回后运行 Java 代码?

我有一个基于 Java 类的 Web 服务。是否可以在被调用操作的 Java 方法中返回确认消息后运行代码。

为了更好地理解,这是工作流程:

  1. 调用我的网络服务的特定操作(方法)
  2. 开始加工
  3. 发送一个确认处理已经开始(这是一个返回值)
  4. 继续处理

线程不起作用,因为线程需要在方法返回之前终止。

有没有人知道如何实现这个场景或替代它?

提前致谢。

java methods service return web

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

如何使用WCHAR*out参数从C#调用C函数?

我在编组方面遇到了一些问题,而我自己也无法解决这个问题.我已经搜索了这个主题,但还没有运气,所以基本上我试图从我的托管C#应用程序调用非托管C函数.C函数的签名如下所示:

long MyFunction(WCHAR* upn, long upnSize, WCHAR* guid, long* guidSize);
Run Code Online (Sandbox Code Playgroud)

我没有访问.dll文件,我只知道该函数正在暴露使用,我知道该函数应该做什么,但我不知道里面发生了什么,所以函数收到一个WCHAR*upn持有UserPricipalName和长度与提供的UPN的长度.还传递WCHAR指针,其中该函数写回与传递的UPN相关联的相应GUID.guidSize指针提供指针的大小,如果它太小,则写入的GUID未完全写入.如果一切顺利,函数应该返回0(当从c#调用时,它从未发生过)

现在,我调用和调用此函数的努力如下所示:

[DllImport(@"MyDll.dll", EntryPoint = "MyFunction", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
public static extern long MyFunction(IntPtr upnPtr, long upnSize, [Out, MarshalAsAttribute(UnmanagedType.LPWStr) ] StringBuilder guidPtr, IntPtr guidSizePtr);


//my attempt to call the Dll's exposed function
string upn = foo@bar.com;
long upnSize = upn.Length;
IntPtr upnPtr = Marshal.StringToHGlobalUni(upn);

IntPtr guidSizePtr = Marshal.AllocHGlobal(sizeof(long));
Marshal.WriteInt32(GuidSizePtr, 128);
var guidSB = new StringBuilder(128);

result = MyFunction(upnPtr, upnSize, guidSB, guidSizePtr);
Run Code Online (Sandbox Code Playgroud)

结果我收到一个AccessViolationException.我玩了很多变种来调用函数,但我从来没有设法收到0作为返回值,我从来没有能够读出GUID,因为我应该这样做.

任何帮助都将不胜感激.

c c# interop marshalling

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

NoNodeAvailableException:没有配置的节点可用

我正在尝试在Java Web Service中搜索Elastic Search,这是我现在使用的方法:

    Client client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.10.150"), 9200));
    SearchResponse searchResponse = client.prepareSearch().execute().actionGet();
Run Code Online (Sandbox Code Playgroud)

第一行可以正常工作,但当它转到第二行时,将发生下面的异常:

NoNodeAvailableException [没有配置的节点可用:[{#transport#-1} {TskPSVeBRR6CvCzP9EVhkQ} {192.168.10.150} {192.168.10.150:9200}]]

无论我使用92009300设置端口,结果都是一样的.

此外,我试图使用NEST从我的.Net程序中搜索,它运行得很好.这是我尝试的方式:

    var node = new Uri("http://192.168.10.150:9200");
    var settings = new ConnectionSettings(node).DefaultIndex("iod-2017.03.08.*");
    _EsClient = new ElasticClient(settings);
    var index = String.Format("iod-{0}.{1:00}.{2:00}.*", item.TriggerTime.Year, item.TriggerTime.Month, item.TriggerTime.Day);
    var uniqueId = item.UniqueId.ToString();
    var result = _EsClient.Search<logs>(s => s.Index(index).Query(q => q.Match(t => t.Field(l => l.id).Query(uniqueId))));
Run Code Online (Sandbox Code Playgroud)

我的Java程序是否有任何错误(防火墙,库的版本,调用API的方法等)?我目前的Java版本是1.8.0.121 …

java elasticsearch

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

将Enum类型值作为Java中的参数传递

我知道我可以使用下面伪代码描述的概念来检查String是否包含在特定的枚举中(我知道没有contains方法Enum,这只是我的例子):

Enum Animal {
    Dog,
    Cat,
    Human
}

public boolean CheckAnimalValid(String name){
    return Animal.contains(name)? true : false;
}
Run Code Online (Sandbox Code Playgroud)

但在以前的方式中,我需要为每个Enum类实现CheckValid方法,因为我需要知道应该检查WHICH Enum类.

我想知道是否有任何方法将Enum类型作为参数传递给函数,以便我可以这样做:

Enum Animal {
        Dog,
        Cat,
        Person
    }

Enum Plant {
    Grass,
    Flower,
    Tree
}

public boolean CheckEnumValid(String name, what_should_I_do? enum){
    return enum.contains(name)? true : false;
}
Run Code Online (Sandbox Code Playgroud)

我想知道what_should_I_do应该使用哪种类型(或关键字)在前面的代码中.我知道我应该使用泛型,但我不知道该怎么做.谢谢!

java enums

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

使用JEST在ElasticSearch中进行部分更新

我正在尝试使用JEST对ElasticSearch实施CRUD操作,并且浏览了一些文章,我发现执行“ 更新 ”的方法是对另一个具有相同“ _id ”的文档进行“ 索引 ”,但是我将替换为以这种方式整个文档。

我想知道JEST是否可以执行“ 部分更新 ”吗?

编辑:

我发现io.searchbox.core包中有一个Update类,它可能会有所帮助,但是在尝试以下操作之后:

Update update = new Update.Builder(updateCameraString).index(this._IndexName).type(this._TypeName).id(id).build();
JestResult updateResult = this._JestClient.execute(update);
Run Code Online (Sandbox Code Playgroud)

的内容updateCameraString

{"Name":"test Added into Es, update again.","CreatedAt":"","ModifiedAt":"","UniqueId":"","Note":""}
Run Code Online (Sandbox Code Playgroud)

似乎一切都很好,但是我会在下面得到答复:

{
  "error": {
    "root_cause": [
      {
        "type": "action_request_validation_exception",
        "reason": "Validation Failed: 1: script or doc is missing;"
      }
    ],
    "type": "action_request_validation_exception",
    "reason": "Validation Failed: 1: script or doc is missing;"
  },
  "status": 400
}
Run Code Online (Sandbox Code Playgroud)

任何设备都可以非常感谢,谢谢!

elasticsearch jest

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