所以我知道这是一个相当大的挑战,但我想使用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的端口,我估计我可以移植自己?然后不必担心许可.
但是我想在开始编码之前做到这一点.我是不是该:
要么
首先要考虑的是我在C++方面并不擅长,因为我很少使用它,但我知道它足以绕过它.我认为#1的原因可能是更好的选择,因为大多数FFmpeg教程都是用C++编写的,而且我对内存管理的控制也比我在c#中做的要多.
你怎么看?您是否也碰巧使用FFmpeg有任何有用的链接(也许是教程)?
Inno Setup允许您通过[Registry]部分设置环境变量(通过设置对应于环境变量的注册表项)
但是,有时您不只是想设置一个环境变量.通常,你想修改它.例如:安装时,可能需要在PATH环境变量中添加/删除目录.
如何从InnoSetup中修改PATH环境变量?
将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)
我真正想要的是让它变量,以便我可以将其精度设置为秒,分钟,小时或日.
我在接受以下选项的采访中遇到了这个问题:
如何在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)
答案应该是e?
如果e不存在怎么办?然后 ?显然c不是答案.a和b将为整个应用程序执行gc(问题需要一个对象).我认为这是因为在gc之前调用finalize()(但是在调用gc的最终化之后是否有必要?)或者我错了?我必须在那里回答这个问题吗?
假设,有一项任务包含以下约:
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()命令立即中止我的所有线程.
我如何立即中止我的任务?
谢谢.
我有一个基于 Java 类的 Web 服务。是否可以在被调用操作的 Java 方法中返回确认消息后运行代码。
为了更好地理解,这是工作流程:
线程不起作用,因为线程需要在方法返回之前终止。
有没有人知道如何实现这个场景或替代它?
提前致谢。
我在编组方面遇到了一些问题,而我自己也无法解决这个问题.我已经搜索了这个主题,但还没有运气,所以基本上我试图从我的托管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,因为我应该这样做.
任何帮助都将不胜感激.
我正在尝试在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}]]
无论我使用9200或9300设置端口,结果都是一样的.
此外,我试图使用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 …
我知道我可以使用下面伪代码描述的概念来检查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应该使用哪种类型(或关键字)?在前面的代码中.我知道我应该使用泛型,但我不知道该怎么做.谢谢!
我正在尝试使用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)
任何设备都可以非常感谢,谢谢!