【ruby gem源码分析】【运动助手免费源码】【燃烧激情指标源码】ws源码下载

2024-11-29 21:43:23 来源:共享干衣机 小程序 源码 分类:百科

1.我把程序修改了 不知道怎样在ws程序下重读脚本
2.OCS2及hunter_bipedal_control编译
3.音视频流媒体开发系列(78)ffmpeg实战教程(一)Mp4,源码mkv等格式解码为h264和yuv数据

ws源码下载

我把程序修改了 不知道怎样在ws程序下重读脚本

       首先,下载动态编译实际上只涉及到两个类型:CodeDomProvider以及CompilerParameters他们都位于System.CodeDom.Compiler命名空间。源码

          

       以下代码可将源码动态编译为一个程序集:

       动态编译

       获得assembly后,下载随后我们即可以通过反射获取程序集里面的源码类型,然后实例化,下载ruby gem源码分析调用类型方法

       不过在此之前,源码我们得构造WS服务的下载代理类,使用WCF框架,源码创建服务代理类,下载常见的源码代理类结构如下:

       所以,我们要动态构造出代理类源码,下载应该知道服务的源码命名空间、服务方法的下载Action地址、ReplyAction地址,源码运动助手免费源码当然还有服务方法的名称,返回类型,参数列表。这里,我们省略掉服务方法的参数列表,构造代理类,实际上就是一个字符串组装的问题,先创建一个类型,用于保存构造代理类所要用到的参数:

       服务代理类构造参数

       public class WebServiceParamaters

       {

           public string address;

           public string Address

           {

               get { return address; }

               set

               {

                   address = value;

               }

           }

           private string serviceNamespace;

           public string ServiceNamespace

           {

               get { return serviceNamespace; }

               set

               {

                   serviceNamespace = value;

               }

           }

          private string methodAction;

           public string MethodAction

           {

               get { return methodAction; }

               set

               {

                   methodAction = value;

               }

           }

           private string methodReplyAction;

           public string MethodReplyAction

           {

               get { return methodReplyAction; }

               set

               {

                   methodReplyAction = value;

               }

           }

           private string methodName;

           public string MethodName

           {

               get { return methodName; }

               set

               {

                   methodName = value;

               }

           }

           private string returnType;

           public string ReturnType

           {

               get { return returnType; }

               set

               {

                   returnType = value;

               }

           }

       }

        好,现在我们只需要构造出代理类源码,然后动态编译出代理类的程序集,最后通过反射调用服务方法:

       WebServiceProxyCreator

       public class WebServiceProxyCreator

       {

           public Object WebServiceCaller(WebServiceParamaters parameters)

           {

               CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");

               CompilerParameters codeParameters = new CompilerParameters();

               codeParameters.GenerateExecutable = false; 

               codeParameters.GenerateInMemory = true; 

               StringBuilder code = new StringBuilder();

               CreateProxyCode(code, parameters);

       codeParameters.ReferencedAssemblies.Add("System.dll"); 

       codeParameters.ReferencedAssemblies.Add("System.ServiceModel.dll"); 

               CompilerResults results = provider.CompileAssemblyFromSource(codeParameters, code.ToString());

               Assembly assembly = null; 

               if (!results.Errors.HasErrors)

               {

                   assembly = results.CompiledAssembly;

               }

               Type clientType = assembly.GetType("RuntimeServiceClient");

              ConstructorInfo ci = clientType.GetConstructor(new Type[] { typeof(Binding), typeof(EndpointAddress) });

               BasicHttpBinding binding = new BasicHttpBinding(); //只演示传统的WebService调用

               EndpointAddress address = new EndpointAddress(parameters.address);

               Object client = ci.Invoke(new object[] { binding, address });

               MethodInfo mi = clientType.GetMethod(parameters.MethodName);

               Object result = mi.Invoke(client, null);

               mi = clientType.GetMethod("Close"); //关闭代理

               mi.Invoke(client, null);

               return result;

          }

           public static void CreateProxyCode(StringBuilder code, WebServiceParamaters parameters)

           {

               code.AppendLine("using System;");

               code.AppendLine("using System.ServiceModel;");

               code.AppendLine("using System.ServiceModel.Channels;");

               code.Append(@"[ServiceContract(");

               if (!String.IsNullOrEmpty(parameters.ServiceNamespace))

               {

                   code.Append("Namespace=\"").Append(parameters.ServiceNamespace).Append("\"");

               }

               code.AppendLine(")]");

               code.AppendLine("public interface IRuntimeService");

               code.AppendLine("{ ");

               code.Append("[OperationContract(");

               if (!String.IsNullOrEmpty(parameters.MethodAction))

               {

                   code.Append("Action=\"").Append(parameters.MethodAction).Append("\"");

                   if (!String.IsNullOrEmpty(parameters.MethodReplyAction))

                   {

                       code.Append(", ");

                   }

               }

               if (!String.IsNullOrEmpty(parameters.MethodReplyAction))

               {

                   code.Append("ReplyAction=\"").Append(parameters.MethodReplyAction).Append("\"");

               }

               code.AppendLine(")]");

               code.Append(parameters.ReturnType).Append(" ");

               code.Append(parameters.MethodName).AppendLine("();");

               code.AppendLine("}");

               code.AppendLine();

               code.AppendLine("public class RuntimeServiceClient : ClientBase<IRuntimeService>, IRuntimeService");

               code.AppendLine("{ ");

               code.AppendLine("public RuntimeServiceClient(Binding binding, EndpointAddress address) :base(binding, address)");

               code.AppendLine("{ ");

               code.AppendLine("}");

               code.Append("public ").Append(parameters.ReturnType).Append(" ");

               code.Append(parameters.MethodName).AppendLine("()");

               code.AppendLine("{ ");

               code.Append("return base.Channel.").Append(parameters.MethodName).AppendLine("();");

               code.AppendLine("}");

               code.AppendLine("}");

           }

       }

       注意,由于代理类使用了WCF框架,所以编译时我们需要添加System.ServiceModel的燃烧激情指标源码引用,当然System.dll肯定是必须的,这里要注意,System.ServiceModel.dll应该保存到应用程序目录,否则动态编译时会引发异常,很简单,在工程引用中添加System.ServiceModel的引用,然后在属性中将拷贝到本地属性设置为true。

         

       到此,我们就可以直接通过传入的服务地址、服务方法名称以及相关的命名空间,即可调用服务(尽管我们只能调用无参服务,并且尽管我们也只能调用使用BasicHttpBinding绑定的服务,这些限制的原因是…我懒,好吧,有乐erp源码相信只要经过一点改动即可去掉这些限制)。

         

       可惜,我们的程序还很傻:每次调用服务都需要去生成代码、编译、创建代理实例最后再调用,嗯…那就缓存吧:

        

       在WebServiceParameters类中重写GetHashCode方法:

       然后在WebServiceProxyCreator中加入缓存机制:

         public class WebServiceProxyCreator

          {

              private static Dictionary<int, Type> proxyTypeCatch = new Dictionary<int, Type>();

              public Object WebServiceCaller(WebServiceParamaters parameters)

              {

                  int key = parameters.GetHashCode();

                  Type clientType = null;

                  if (proxyTypeCatch.ContainsKey(key))

                 {

                     clientType = proxyTypeCatch[key];

                     Debug.WriteLine("使用缓存");

                 }

                 else

                 {

                     CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");

                     CompilerParameters codeParameters = new CompilerParameters();

                     codeParameters.GenerateExecutable = false;

                     codeParameters.GenerateInMemory = true;

                     StringBuilder code = new StringBuilder();

                     CreateProxyCode(code, parameters);

                     codeParameters.ReferencedAssemblies.Add("System.dll");

                     codeParameters.ReferencedAssemblies.Add("System.ServiceModel.dll");

                     CompilerResults results = provider.CompileAssemblyFromSource(codeParameters, code.ToString());

                     Assembly assembly = null;

                     if (!results.Errors.HasErrors)

                     {

                         assembly = results.CompiledAssembly;

                     }

                     clientType = assembly.GetType("RuntimeServiceClient");

                     proxyTypeCatch.Add(key, clientType);

                 }

                 ConstructorInfo ci = clientType.GetConstructor(new Type[] { typeof(Binding), typeof(EndpointAddress) });

                 BasicHttpBinding binding = new BasicHttpBinding(); //只演示传统的WebService调用

                 EndpointAddress address = new EndpointAddress(parameters.address);

                 Object client = ci.Invoke(new object[] { binding, address });

                 MethodInfo mi = clientType.GetMethod(parameters.MethodName);

                 Object result = mi.Invoke(client, null);

                 mi = clientType.GetMethod("Close"); //关闭代理

                 mi.Invoke(client, null);

                 return result;

             }

        }

OCS2及hunter_bipedal_control编译

       猎人双足控制(hunter_bipedal_control)是专为EC-hunter-v双足机器人打造的开源控制框架,基于非线性MPC和WBC技术。

       首先,确保已安装ROS系统,推荐使用Ubuntu .版本。具体安装步骤参照ROS-noetic安装教程。

       执行安装命令,将ROS环境变量添加至bashrc文件,使终端默认开启环境。pr社风格源码

       接着,安装OCS2(Open Control System for Robotics)依赖。创建工作目录catkin_ws,随后下载所有源代码至src目录下,共7个包。务必安装所有OCS2指定的可选依赖,实践表明它们是必需的。

       下载并编译raisim和elevation_mapping_cupy,后者应优先编译。

       通过官方指引下载并放置onnxruntime至~/.local/目录,设置环境变量以确保后续安装顺利。

       执行OCS2安装命令,成功后可查看输出。

       关于hunter_bipedal_control安装,一些教程建议在独立文件夹内操作,实际操作中遇到无法找到ocs2_legged_robot错误。官方提供两种编译方式,但是否能同时编译,作者尚未进行尝试,第二种编译需安装lcm。

       编译完成后,设置环境变量写入~/.bashrc,可直接执行模拟命令。若执行报错,请重新尝试。

       遇到github网络连接问题时,多次执行安装命令即可解决。

       在编译OCS2后,若始终无法找到ocs2_legged_robot,尝试设置路径和ocs2_legged_robot_DIR变量无效,最后返回catkin_ws目录下重新编译成功。

音视频流媒体开发系列()ffmpeg实战教程(一)Mp4,mkv等格式解码为h和yuv数据

       在这个FFmpeg实战教程中,我们将探索如何将常见的视频格式如MP4和MKV解码为H和YUV数据。首先,让我们来看一个实例,通过运行解码过程,你将看到两个文件的生成,分别对应解码后的h和YUV数据,其中h由于采用了高效的压缩技术,文件大小明显小于YUV文件。

       解码流程包括以下步骤:首先,将ws.mp4文件复制到项目目录,然后创建两个输出文件。接下来,初始化所需的组件,接着打开视频文件,获取视频信息并选择合适的解码器。在解码过程中,要注意av_read_frame()循环结束后可能遗留少量帧数据,这时需要调用flush_decoder函数,将这些帧数据完整输出。

       下面是源代码示例,展示如何执行这些操作:

       拷贝ws.mp4并创建输出文件

       初始化解码器和相关组件

       打开和解码视频

       使用flush_decoder确保所有帧数据都被处理

       运行程序后,你将看到生成的h和YUV文件。如果你对音视频开发感兴趣,可以关注我们的免费学习资源,包括FFmpeg、WebRTC、RTMP、NDK和Android高级开发等内容。群文件中提供了详细的面试题、学习资料和教学视频,以及学习路线图,点击加群获取,希望能对你有所帮助。

       对于Windows用户,需要配置FFmpeg环境。首先从ffmpeg.zeranoe.com下载相应版本的shared和dev版本,然后将include和lib文件夹分别复制到指定位置,最后在MinGW命令行中执行命令。而对于Linux或MacOS用户,可以在GCC命令行环境中进行操作。

更多资讯请点击:百科

热门资讯

web 计时源码_web计时器代码

2024-11-29 21:321752人浏览

1元众筹平台源码

2024-11-29 20:362060人浏览

qq收藏后台更新源码_qq收藏api

2024-11-29 19:381793人浏览

空开源码_空开原理图

2024-11-29 19:09839人浏览

推荐资讯

qstring 源码下载

1.QT原理与源码分析之QT字符串高效拼接原理2.QT获取程序编译时间与当前时间的区别及应用场景3.qt代码出现中文乱码如何解决?4.QT5.1 用tr)输入中文会显示乱码 求帮忙.QT原理与源码分析

漂亮的个人源码带后台_个人网源码

1.九款好看的后台管理系统登录模板九款好看的后台管理系统登录模板 欢迎观赏九款精心设计的后台管理系统登录模板,它们不仅美观,而且实用,适合直接融入项目中。欲获取源代码,可加入下方指定群组,免费领取