基于linphone实现视频通话小结

时间:2019-05-15 13:49:59下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《基于linphone实现视频通话小结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《基于linphone实现视频通话小结》。

第一篇:基于linphone实现视频通话小结

基于linphone实现视频通话的小结

Linphone解析

先看一下linphone的实现结构:

由上图可知,Linphone内部有明显的用户接口和内核引擎区分,这为我们基于它提供的接口进行再次开发提供了可能。其中liblinphone是内核的核心,这个库提供了linphone功能的所有应用。Liblinphone库是一个功能巨大的SIPVOIPVIDEO SDK.我们可以用它提供的功能在我们想要的应用上开发视频通话功能。

Liblinphone库的结构包括:

mediastreamer2,用于音视频流处理的多媒体SDK;oRTP,网络协议库;eXosip2,SIP用户代理库。文档查看:

http://mirror.yongbok.net/nongnu/linphone/docs/liblinphone/modules.html

遗留问题:关于操作系统底层的硬件接口结构不清楚,如何为C语言程序提供JAVA接口,ANDROID的NDK原理不清楚。

Linphone代码java层的大致结构是这样的:

主activity为linphoneActivity,它总领着其他的程序块。

linphoneService做linphone在后台需要做的事,因此会有许多监听器,比如监听来电。linphoneManager是linphone操作包,它的函数能实现初始化以及各类情况的实现。linphoneCore封装了C语言通信编码实现,环境变量初始化等功能。DailerActivity管理打接电话。

用户点击linphone的图标后就开始了linphone软件,这时linphoneActivity开始运行,它使linphoneService开始,并做一些linphone帐号密码的登录操作同时引导用户进行环境变量的设置(LinphonePreferencesActivity)。环境变量都储存在sharedPreferences中,它是整个工程共享的一个变量池。这些环境变量有音频和视频编码设置选择,帐号密码,服务器设置,自动启动,视频设置,回音校正,网络协议设置。

当linphoneService开始的时候它运行linphoneManager.creatAndStart->linphoneManager开始实例化,设置电话铃音以及配置信息的保存路径,依据工程的环境变量以及配置信息初始化LinphoneCore,设置PlaybackGain,周期性地检测核对Sip数据,设置网络协议和相应的端口,根据CPU速度以及机型计算能为用户提供的编解码方式,计算能否回音校正,传递账户服务器信息到LInphoneCore中,得到网络连接操作对象和连接信息Info并告知LInphoneCore。

public synchronized static final LinphoneManager createAndStart(Context c, LinphoneServiceListener listener){

if(instance!= null)

throw new RuntimeException(“Linphone Manager is already initialized”);

instance = new LinphoneManager(c);

instance.serviceListener = listener;

instance.startLibLinphone(c);

return instance;

} //From LinphoneManager

private synchronized void startLibLinphone(final Context context){

try {

copyAssetsFromPackage(context);

mLc = LinphoneCoreFactory.instance().createLinphoneCore(this, linphoneConfigFile, linphoneInitialConfigFile, null);

mLc.enableIpv6(mPref.getBoolean(getString(R.string.pref_ipv6_key), false));

mLc.setZrtpSecretsCache(basePath+“/zrtp_secrets”);

mLc.setPlaybackGain(3);

mLc.setRing(null);

mLc.setRootCA(linphoneRootCaFile);

try {

initFromConf(context);

} catch(LinphoneException e){

Log.w(“no config ready yet”);

}

TimerTask lTask = new TimerTask(){

@Override

public void run(){

mLc.iterate();

}

};

mTimer.scheduleAtFixedRate(lTask, 0, 100);

IntentFilter lFilter = new IntentFilter(Intent.ACTION_SCREEN_ON);

lFilter.addAction(Intent.ACTION_SCREEN_OFF);

context.registerReceiver(mKeepAliveReceiver, lFilter);

}

catch(Exception e){

Log.e(e,“Cannot start linphone”);

}

} //From LinphoneManager

public void initFromConf(Context context)throws LinphoneConfigException {

//traces

boolean lIsDebug = mPref.getBoolean(getString(R.string.pref_debug_key), false);

LinphoneCoreFactory.instance().setDebugMode(lIsDebug);

if(initialTransports == null)

initialTransports = mLc.getSignalingTransportPorts();

setSignalingTransportsFromConfiguration(initialTransports);

try {

// Configure audio codecs //

enableDisableAudioCodec(“speex”, 32000, R.string.pref_codec_speex32_key);

enableDisableAudioCodec(“speex”, 32000, false);

enableDisableAudioCodec(“speex”, 16000, R.string.pref_codec_speex16_key);

enableDisableAudioCodec(“speex”, 8000, R.string.pref_codec_speex8_key);

enableDisableAudioCodec(“iLBC”, 8000, R.string.pref_codec_ilbc_key);

enableDisableAudioCodec(“GSM”, 8000, R.string.pref_codec_gsm_key);

enableDisableAudioCodec(“PCMU”, 8000, R.string.pref_codec_pcmu_key);

enableDisableAudioCodec(“PCMA”, 8000, R.string.pref_codec_pcma_key);

enableDisableAudioCodec(“AMR”, 8000, R.string.pref_codec_amr_key);

// Configure video codecs

for(PayloadType videoCodec : mLc.getVideoCodecs()){

enableDisableVideoCodecs(videoCodec);

}

mLc.enableEchoCancellation(mPref.getBoolean(getString(R.string.pref_echo_cancellation_key),false));

} catch(LinphoneCoreException e){

throw new LinphoneConfigException(getString(R.string.wrong_settings),e);

}

boolean isVideoEnabled = isVideoEnabled();

mLc.enableVideo(isVideoEnabled, isVideoEnabled);

//1 read proxy config from preferences

String lUserName = mPref.getString(getString(R.string.pref_username_key), null);

if(lUserName == null || lUserName.length()==0){

throw new LinphoneConfigException(getString(R.string.wrong_username));

}

String lPasswd = mPref.getString(getString(R.string.pref_passwd_key), null);

if(lPasswd == null || lPasswd.length()==0){

throw new LinphoneConfigException(getString(R.string.wrong_passwd));

}

String lDomain = mPref.getString(getString(R.string.pref_domain_key), null);

if(lDomain == null || lDomain.length()==0){

throw new LinphoneConfigException(getString(R.string.wrong_domain));

}

String lStun = mPref.getString(getString(R.string.pref_stun_server_key), null);

//stun server

mLc.setStunServer(lStun);

mLc.setFirewallPolicy((lStun!=null && lStun.length()>0)? FirewallPolicy.UseStun : FirewallPolicy.NoFirewall);

//auth

mLc.clearAuthInfos();

LinphoneAuthInfo lAuthInfo LinphoneCoreFactory.instance().createAuthInfo(lUserName, lPasswd,null);

mLc.addAuthInfo(lAuthInfo);

//proxy

mLc.clearProxyConfigs();

String lProxy = mPref.getString(getString(R.string.pref_proxy_key),null);

if(lProxy == null || lProxy.length()== 0){

lProxy = “sip:”+lDomain;

}

if(!lProxy.startsWith(“sip:”)){

lProxy = “sip:”+lProxy;

}

//get Default proxy if any

LinphoneProxyConfig lDefaultProxyConfig = mLc.getDefaultProxyConfig();

String lIdentity = “sip:”+lUserName+“@”+lDomain;

try {

if(lDefaultProxyConfig == null){

lDefaultProxyConfig LinphoneCoreFactory.instance().createProxyConfig(lIdentity, lProxy, null,true);

mLc.addProxyConfig(lDefaultProxyConfig);

mLc.setDefaultProxyConfig(lDefaultProxyConfig);

} else {

lDefaultProxyConfig.edit();

lDefaultProxyConfig.setIdentity(lIdentity);

lDefaultProxyConfig.setProxy(lProxy);

lDefaultProxyConfig.enableRegister(true);

lDefaultProxyConfig.done();

}

lDefaultProxyConfig = mLc.getDefaultProxyConfig();

= =

if(lDefaultProxyConfig!=null){

//prefix

String lPrefix = mPref.getString(getString(R.string.pref_prefix_key), null);

if(lPrefix!= null){

lDefaultProxyConfig.setDialPrefix(lPrefix);

}

//escape +

lDefaultProxyConfig.setDialEscapePlus(mPref.getBoolean(getString(R.string.pref_escape_plus_key),false));

//outbound proxy

if(mPref.getBoolean(getString(R.string.pref_enable_outbound_proxy_key), false)){

lDefaultProxyConfig.setRoute(lProxy);

} else {

lDefaultProxyConfig.setRoute(null);

}

}

//init network state

ConnectivityManager lConnectivityManager =(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo lInfo = lConnectivityManager.getActiveNetworkInfo();

mLc.setNetworkReachable(lInfo!=null? lConnectivityManager.getActiveNetworkInfo().getState()==NetworkInfo.State.CONNECTED:false);

} catch(LinphoneCoreException e){

throw new LinphoneConfigException(getString(R.string.wrong_settings),e);

}

} //From LinphoneManager

在DialerActivity中,设置了CallButton,当用户选择了拨号对象并点击Callbutton时,运行Linphone.Manger.NewOutgingCall并传入地址,这个函数解析地址为SIP地址,选择摄像头,计算电话被持方向。当对方接听时,通话状态改变,相应的执行就交给电话状态监听器。

在Linphone中有4个非常重要的监听器,它们实现了打接电话以及电话过程的调整,都由LinphoneManager实现LinphoneCore的接口并重写,分别是: OnDisplaySatus显示监听:

用于显示LinphoneCore内核欲显示的信息。OnGlobalStateChanged全局变量改变监听:

当已经在打电话的时候若已经在通话则设置通话键不可见,挂机键可见;如果在视频通话就设置相应的视频通话的控制按钮。

OnRegistrationStageChanged帐号状态监听: 若成功提示OK,并允许通话;若失败提示失败。

OnCallStateChanged电话状态监听: 当有电话打来时,点亮10秒屏幕,开始响铃;当接了电话,停止响铃,设置声音到听筒;当状态为IncomingCallReceived运行LInphoneCore.callPending;当状态为OutgoingInit运行EnterCallmode(解析并显示对方名称,开启距离感应器,设置静音,通话按钮);当状态为Connected,告知LinphoneCore通话方向为来电,并EnterCallmode;当状态为ERROR和CALLEND运行Exitcallmode。

public void callState(final LinphoneCore lc,final LinphoneCall call, final State state, final String message){

Log.i(“new state [”,state,“]”);

if(state == IncomingReceived &&!call.equals(lc.getCurrentCall())){

if(call.getReplacedCall()==null){

//no multicall support, just decline

lc.terminateCall(call);

}//otherwise it will be accepted automatically.return;

}

if(state == IncomingReceived){

// Brighten screen for at least 10 seconds

WakeLock wl = mPowerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP

|PowerManager.ON_AFTER_RELEASE

|PowerManager.SCREEN_BRIGHT_WAKE_LOCK,“incoming_call”);

wl.acquire(10000);

startRinging();

}

if(mCurrentCallState == IncomingReceived){

//previous state was ringing, so stop ringing

stopRinging();

routeAudioToReceiver();

}

if(state == CallEnd || state == Error){

mAudioManager.setMode(MODE_NORMAL);

}

if(state == State.Connected){

if(Hacks.needSoftvolume()LinphonePreferenceManager.getInstance().useSoftvolume()){

||

adjustSoftwareVolume(0);// Synchronize

}

}

mCurrentCallState=state;

serviceListener.onCallStateChanged(call, state, message);

}//From LinphoneManeger

public void onCallStateChanged(final LinphoneCall call, final State state, final String message){

if(state == LinphoneCall.State.IncomingReceived){

//wakeup linphone

startActivity(new Intent()

.setClass(this, LinphoneActivity.class)

.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));

} else if(state == LinphoneCall.State.StreamsRunning){

if(Version.isVideoCapable()

&& getResources().getBoolean(R.bool.use_video_activity)

&&!VideoCallActivity.launched && LinphoneActivity.isInstanciated()

&& call.getCurrentParamsCopy().getVideoEnabled()){

// Do not call if video activity already launched as it would cause a pause()of the launched one

// and a race condition with capture surfaceview leading to a crash

LinphoneActivity.instance().startVideoActivity();

}

}

mHandler.post(new Runnable(){

public void run(){

if(guiListener()!= null)

guiListener().onCallStateChanged(call, state, message);

}

});

}//From LinphoneService

public void onCallStateChanged(LinphoneCall call, State state, String message){

LinphoneCore lc = LinphoneManager.getLc();

if(state == LinphoneCall.State.OutgoingInit){

enterIncallMode(lc);

} else if(state == LinphoneCall.State.IncomingReceived){

callPending(call);

} else if(state == LinphoneCall.State.Connected){

if(call.getDirection()== CallDirection.Incoming){

enterIncallMode(lc);

}

} else if(state == LinphoneCall.State.Error){

if(mWakeLock.isHeld())mWakeLock.release();

showToast(R.string.call_error, message);

exitCallMode();

} else if(state == LinphoneCall.State.CallEnd){

exitCallMode();

}

}//From DialerActivity

关于代码结构的一点思考:

既然已经知道了监听器在linphoneManeger中重写,为什么简简单单一个OnCallStateChanged要分开来写在3个不同的Activity中呢? 对于大的工程来说,一个人的力量是不可能完成巨大的工作量的,这就需要有分工有层次。比如有专门写linphonemaneger的人,他需要代码块有监听器但是监听器的内容不是他得工作范围,那么他就可以把他得工作范围内的工作完成然后运行一个其他代码块的函数,这个函数的具体完成工作就交给别人了。在软件工程中,每个人按照合理的分工和安排高效地完成自己的工作,就可以让整个工程快速有序的完成。

另外,对代码尽量细分为更小的结构,有利于我们编写和设计代码,并极大地利于代码修改以及版本升级。

项目感想:

大概是从四月份的时候开始着手准备这个视频通话的项目,但是因为前期孤军无援,学习的进度十分慢。目前项目已经做到初步实现视频通话的功能,具体的功能开发可能还需要后期的努力。整个项目进程大概是分为两个阶段,第一阶段是上学期徐卓自己一个人单独摸索,除去前期准备,上课和期末复习的时间,有效工作时间大概是两个半月;第二阶段是暑假期间我们一起全脱产在实验室专心研究的一个月时间,每天有效工作时间12小时以上。先说下第一阶段,大概是花了一个月的时间把一些需要基础知识准备好了,主要是JAVA语言的学习和android平台的熟悉;接着用了一个月的时间去考究具体的视频通话的实现方法,期间主要阅读和学习的资料是关于通讯协议和视频编解码的,同样也是因为缺少前人指导,走了不少弯路;最后一个月我们选定一个开源的视频通话软件linphone,这个软件有很多年的历史,在视频通话方面做得不错,而且现在有可以在android平台上运行的版本,所以我们就想以此作为我们的切入点,先学习别人的软件代码,看看别人是怎么实现的,然后再根据别人的代码以及我们自己的需求来做出一些我们自己的改进。本来以为确立了这个路线之后,之后的工作会顺畅很多,但是谁知道还是遇到了很多困难,比如这个代码下载下来的需要在linux下编译,而我们之前没有使用过linux系统,并且对编译的原理一无所知,又不得不放下进度去阅读与这方面有关的资料。因为这方面底子比较薄,有关操作系统的知识没有学过,所以这段时间是我最艰苦的时候,用了很长的时间才把代码编译出来,并且走了一大段的弯路。遇到的第二个问题是,linphone源代码数量极度庞大,估计将近十万行。因为各方面都做得比较完善,所以在很多方面都写得十分详细乃至冗余(个人觉得)。但是如果要搞清楚它的原理,我们又不得不从头到尾一点点地吃透它的代码。而当我们潜心下去研究他的代码的时候,还发现一个问题,就是有关linphone的资料十分少,后来根据同行的意见,他们说主流的实现方法是利用opencore,而linphonecore用得比较少。但是我们已经花了很多时间在这上面了,所以如果重新选择另外的方案,那么之前做的很多努力都等于浪费,所以还是决定坚持看linphone,只是多了一个教训,以后做项目开发,一定要选择主流的方法来做,因为这无论在查阅资料上还是在求助支援上都有很大的帮助。

第二阶段,也就是暑假的一个月时间,我们两个人一起决定用半个月的时间攻克linphone的代码。其实一开始也出现过意见分歧,主要有两种实现方案,一个是继续沿用linphone的模式,仔细研读linphone的代码,一点点地啃,然后根据他的框架来修进我们的网站,这个方案的优点是比较保险,只要读懂了他的代码,那么一定是可以实现的,缺点就是时间周期太长,阅读代码工作量十分大,间接导致开发工作十分痛苦;第二种方案,就是先用最简单的方法,用SDK给的接口去实现最简单的框架,然后再根据这个框架去查找相关的资料,去丰富这个框架,这个方案的优点是可以在短期之内看到成果,实现方法十分简单,但是如果想深入底层操作编码方式或者通信协议,还需要自己去查找资料,并且具体查什么资料自己却不清楚,有一种摸着石头过河的感觉,不像linphone那样,有一个明确的方向,这种摸着石头过河的方案有可能很快就能解决问题,但是也有可能一个暑假留在这都解决不了问题。最后经过我们两认真讨论,还是采取第一种方案——研读linphone的代码。其实一开始,我们还有一点“代码情节”,如果读的是linphone的代码,那么必然会导致我们到时自己的项目框架和linphone是差不多的。但是后来考虑到重要的一点,开放开源的思想在软件开发领域越来越成为主力,linphone是开源的软件,并且android本身也是开源的系统,所以我们用这种“开源”的思想去实现视频通话的功能也未尝不可,至少这是一种提高学习效率的方法。因为代码量巨大,很多类和方法之间的关系十分复杂,我们就把他们之间的关系用一张大纸画下来。后来叶老师告诉我们说其实有这样的软件可以帮我们做这种工作„„„不过也没关系了,笨方法也有笨方法的好处,至少我们对linphone的架构和linphonecore的接口有了比较清晰的认识。读懂代码之后,剩下的工作基本上就是整理linphone提供的接口,来实现我们想要的功能,于是,我们软件的1.0版本就这样诞生了。

虽然不能说大功告成,但是至少第一阶段的目标是实现了。有几点比较重要的感触: 1.这当中最大的感触是,走了很多弯路。“弯路”的由来,主要是缺少前人的指导,越到问题只能自己摸索,对很多问题没有一个宏观的把握,就导致很容易走上弯路,特别是对视频通话这个涉及多方面从来没接触过的知识上。保守估计,有将近三分之一的时间在“弯路上”度过。如果有一个高手可以引领一下,项目进度可以大大加快。

2.项目团队的重要性。有一个团队几个人一起开发(哪怕团队只是两个人),开发速度会大大提高。一开始做的时候,其实我并没有特别清楚地意识到这点,以为很多事情一个人可以解决,但是其实很多很多问题不是这样的,一个人容易钻进去出不来,效率十分低。3.通过搜索引擎独立解决问题的能力。一开始很多问题,我们总感觉如果不问别人,就没办法解决。从互联网上找了一些也是做android开发的朋友来请教的时候,他们也很残忍,一般不告诉你答案,而是让你自己去找搜索引擎。也许是一开始的时候,我使用搜索引擎的能力不够,很多问题别人可以在搜索引擎上找到答案,自己却找不到。但是没有办法,最后只能自己闷着头慢慢摸索。经过几个月的“训练”,后来这方面的能力也渐渐地提高了,这也许也是“弯路”上的最大收获。

4.资源的整合和积累。很多时候,搜索引擎并不是万能的,虽然上面有很多信息,但是同样还有很多问题上面解决不了。所以这时我们就需要从搜索引擎以外的资源去收集我们需要的。从徐卓而言,主要是来自两方面(这是利器),第一点是朋友网络资源,为了学好android,徐卓一开始就建立了一个可以容纳500人的QQ交流群,然后到每个高校的相关论坛发帖子,让有共同爱好的人加到群里来,很快群就加满了,大部分是高校里面搞android的爱好者,当然也有一些已经工作了好几年的资深人士。徐卓的朋友资源就是从这个群里发展而来的,把平时比较活跃的朋友加到好友里面,并对他们进行分组,当有问题的时候就可以向他们请教。比如相关几个对编译原理特别懂的并且比较热心的朋友,徐卓会把他们加到QQ的“编译组”,当遇到这方面的问题的时候,就会把问题仔细写下来然后群发给这个小组上的所有人,一般来说都能得到比较满意的答案。平时花一点时间去积累一些这方面的好友,当我们遇到问题的时候可以帮我们省下大片大片的时间;第二点就是论坛资源了,其实原理和刚才的朋友网络资源差不多,只不过这个论坛资源面向更广,我在好几个论坛都有养比较高级的账号,如CSDN,eno等等。在有问题的时候就会上论坛发帖提问,这种方法唯一的缺点就是答案反馈的周期较长,有时候要等上几天才有人愿意回复你。

第二篇:观看视频小结

语文教研组观看视频后的小结

为了提高教师的业务水准,加强教学研究,坚持教研兴教,我们举行了全校语文教师看《一个中国孩子的呼声》的视频活动。旨在通过这次活动提高教师的课堂教学水平。全组教师在一起听课,领略名师风采,随后进行了评课,相互交流探讨,畅所欲言,表达自己的所感所悟。课后教师要认真地反思教学,要从深层次上去考虑自己的教学工作,写出有质量的听课反思,通过互相听课、评课,取长补短,不断提升自己的教科研能力。评课后,又根据自己在平时的教学课堂中遇到的问题,进行交流。

通过听课交流教研,总体有以下几点:

1、教师观念较以前有了很大转变、多媒体运用恰到好处,制作的课件直观、形象;课堂设计新颖,学生容易接受,能按教学目标完成教学任务。

2、选取的教学问题具有典型性、有效性、注意揭示知识的内在联系,合理适用教学手段。

3、创设情境及时,呈现的问题具有探索与思考的价值,教师能给每个学生提供平等的参与机会,并能组织学生发现问题,主动探索解决问题,鼓励学生有不同的解法与思考,及时引导学生掌握基本方法。

4、练习容量适当,有针对性、开放性,反馈及时。

5、学习活动方面,学生能积极参与学习活动,有探索和创新意识。教师能组织全体学生参与学习活动,采用动手实践、讨论交流等方式组织学生参与活动,学生参与活动的时间充分。

6、课堂气氛方面,教师教态自然,能尊重学生,善于倾听学生的意见,鼓励学生回答问题,学习进程张弛有度,课堂活跃有序,师生、生生间能平等交流。

总之,通过这次听课活动,可以使教师业务水平也得到了提高。在教学中教师应注重学生的合作学习,充分发挥了学生的主体作用,特别注重分层次教学,使每一位学生不同程度的掌握所学知识等等。从而使我们学到了很多好的教学方法,汲取了名师好的教学经验。愿这阵和谐的教研之风吹入每一位教师的心中!

第三篇:视频公开课学习小结

视频公开课学习小结

为了更多的利用外校的优秀学习资源,我在四月份学习了一些中国大学生视频公开课,仔细一找,里面有来自全国许多大学上课的视频,而且都特别的精彩,激发着我不断学习的兴趣。每听完其中的一堂课,我都感到收获颇丰,一方面收获了知识,而另一方面又激励着我不断地进步。今天,我就选取其中一节北京航空航天大学姚小玲老师所讲的视频课来谈谈我的学习心得。

姚老师的课讲得生动有趣,独具风格,洒脱,自然,同时,有极富哲理,她用她自身的演讲诠释着什么叫演讲与口才。她从一句提问开始她所讲可得内容,她问:“同学们,什么叫口才?”其实,现代的大学生有许多人已经曲解了口才的定义了,许多人认为说话多的人就是口才好,也有许多人认为认识的人多就是口才好,其实这些都是错误的,口才应该是言之有理,言之有物,言之有序,言之有效,言之有情。

在当今社会,口才是一个人成功十分关键的因素,具有极为重要的地位,有人说当今社会的三大法宝:口才,电脑,金钱,可见口才的重要性。美国的石油大王卡耐基说过:“一个人的成功15℅的是靠技能,85℅靠的都是人际关系”,这句话或许有点夸张,但也说明了口才对我们是十分重要的。在如今这个社会上,一个人若想取得一定的成功,就必须要与人沟通,这样才能获得别人的认可,这样才能实现人生的价值。我们每天都不是一个人生活,都缺少不了和别人的沟通与交流。这就要求我们必须有良好的口才,否则和别人交流会出问题甚至矛盾和积怨。据说有一位领导招聘一名司机,有2名候选人,领导然他们分别作了3分钟的陈述,第一个上去的司机就说了一大堆话比如说我是怎么为领导服务,怎么准时,怎么没有出事故,讲了满满三分钟,而另一位司机回答十分简洁,却最终

被领导录用了,何也?我今天竞聘领导司机这个职位,我坚持的原则是:“听的说不得,开得使不得,吃的喝不得”。相信大家多少也明白其中的意思,他用简洁的语言表达了他开车时听领导说话,但不会说出去,吃饭可以但绝不喝酒,为了领导的安全,车子白天8小时是我管,但8小时后我就不能使用,因为这车是公车,这样一个会说话的人怎么会不受领导的重视呢。

那么,我们应该如何才具有口才呢?应当具有德,才,学,识,胆,情,体7个重要的方面,也就是说,一个具有良好口才的人必须有良好的品德,试想一下一个人如果没有道德,说出的话也必定令人反感,要有很高的才能,要有很高的学习能力,要有很广博的见识,这要才能和谈话者具有共同的话题,很容易聊到一块去,要有真情,首先要感染自己,才能感染别人,要有健康的体魄,一个人如果没有健康的身体的话也就不能够谈其他方面的事情了。口才是锻炼出来的,并不是天生的,正如一个人生下来并不会游泳,只有经过不断地实际锻炼才可以学会,口才也是一样的,只有通过我们不断地和别人的谈话中才可以不断地进步,才可以培养出极为突出的口头表达能力。

那么,在我们具体和别人交谈时应该怎样做呢?首先,我们必须要以对方为中心,站在对方为中心,站在对方的角度思考问题,了解对方的心里。其次,我们必须真诚,只有真诚才能够打动别人,才能够使别人受到感染,虚伪的谈话可以令别人厌恶,甚至会激发矛盾,然后,要有良好的心里素质,万一我们和谈话者产生一些语句冲突时,我们必须要有良好的心理素质,要善于包容对方,学会解除紧张的气氛,有时我们可以用一些幽默的方式来缓解压力,有时我们可以采取妥协的方式来解除紧张的气氛。最后,我们要学会多听少说,上天给了我们一只嘴巴和两只耳朵,何也?或许这就在告诉我们一个人要多听少说,一个夸夸其

谈的人是不会有太大的出息的,有人说聪明的人借助经验说话,更聪明的人借助经验不说话。在平时的交谈中不要相互模仿,要形成自己的风格。

我还清楚的记得自己在江苏大学十佳青年学生答辩时的场景,现在想想自己正是缺乏这种魄力,这种口才,这种心理素质,当时我的回答简直糟糕透了,评委老师问了我一个问题,我当时就特别紧张,感觉压力特别大,这就反映了我的心理素质不好,不会调整自己,然后,我就简单的回答了一下,最终结果可想而知,我失败了。不过现在意识到自己的不足还为时不晚,在今后的日子里,我一定好好锻炼自己的口才,是自己不断地进步。

第四篇:《食品安全教育专题片》视频小结

观看《食品安全教育专题片》视频小结

食品安全是关系国计民生的大事,在学校直接关系到广大师生的身体健康和生命安全。为了提高学校师生参与食品安全的意识,普及食品安全科学知识。根据上级文件精神和要求,我校于认真观看了《食品安全教育专题片》。经精心组织,开展了形式多样、内容丰富的食品安全宣传教育活动,掀起了全校师生广泛参与的食品安全教育活动高超,取得了显著成效。现小结如下:

一、学校领导高度重视,精心组织,方案周密,提高了全校师生对开展“食品安全教育”活动重要意义的认识,任务落实到人、责任到位,确保了食品安全教育的质量。

二、结合教育,我们学校做到了“三个一“,即:上一节食品安全为主要内容的《健康教育》课;召开一次食品安全主题班会;办一期以食品安全为主题的《卫生与健康》宣传拦。

三、通过观看“食品安全教育”专题讲座,丰富了广大师生的食品安全知识,他(她)们知道了土豆变绿不能吃、豆荚半生吃了中毒等知识。

五、学校进一步加强了食堂、师生饮用水的卫生安全管理,严格把好源头食品卫生安全关。主要采取如下几点措施:

一是把好食堂食品采购关,五类食品采购要有国家规定的“QS”标志食品并有供应方“三证”;肉类、蔬菜要定点采购并且索证。二是要求食堂工作人员必须搞好食品卫生工作,饭菜要弄熟;要坚守岗位,做好防蝇、防鼠、防投毒等工作。

三是学校的水池注意做好消毒,龙头设备完好无损,并定期清洗消毒。

四是通过宣传教育、监督管理,禁止学生乱吃乱喝。通过观看食品安全教育视频,增强了师生的自我保护意识、健康意识和维权意识,全校上下,形成了人人关注、支持、参与食品安全的良好氛围。

2012年09月11日

第五篇:大学生10月实现月小结

这个月我开始在办公室实习,办公室主要负责日常合同与文件的传阅签订,物资材料的采购与管理,以及与合作单位之间的文书往来,办公室的工作多且繁杂,大家各司其职。

刚到办公室的第一天,郑主任就给我分配了工作任务,我主要负责合同在内部的传阅审批,以及学习会议纪要的书写。办公室分为两个办公的地方,我们办公室除了之前提到的郑主任,还有负责后勤的小丽姐和带我实习的师傅Kevin,在此后的实习过程中,他们都给了我一定的帮助与指导。

对于合同的签订每个公司都有一定的程序,像我们拿到一份合同,一般都会启用一份合同审批表,在内部相关各部门间传阅。当某些部门提出不同意见的时候,负责传阅的人还要负责转告及协调意见,直到各部门的意见一致,才能进一步的进行合同的逐层传阅。

别看一份合同的签署只是合作双方在合同上签章那么简单,签订合同的过程中有很多细节需要谨慎处理,例如,一般合同必须双面打印,这样可以防止合同签订后有人在背面空白的地方加上原本没有的条款。而当一份合同不是由法人代表亲自签订的时候,还要签署一份法人委托书,表示授予其他领导签订合同的权利。

此外,为了防止否认或更换合同内容而造成的不必要的争议和损失,一份正式有效的合同除了合作双方的签章以外,还要加盖骑缝章。即在合同的边缝盖章,合同的每一页均有红印,并且第一页和最后一页应同时有字。骑缝章可以防止在文件内挖补或加页造假,保持了合同的完整性,起到一定的防范风险作用。规范的骑缝章在合同展开时要能够还原成原章,才能发挥骑缝章的作用。关于会议纪要的书写也有一定的规范和格式,一开始,Kevin拿出历年来的会议纪要给我看,并且在开会时带上我。会后要求我写会议纪要,然后再做修改,并指点我一些措辞方面的技巧。拿自己写的会议纪要与Kevin写的作比较时发现,我写的会议纪要始终不如Kevin的那样精炼,然后他告诉我公文的书写需要一定的领悟与练笔,要慢慢积累,急不得。我便常常拿之前的会议纪要来看,背一些常用措辞并在下一次的会议纪要中做出运用。希望假以时日可以写出措辞简练内容清晰的会议纪要。

而办公软件和办公工具也有一定的使用技巧,刚开始的时候,我也遇到了一些“难题”。例如,不懂得怎么双面打印和单独打印,不会设置excel的自动换行,甚至复印机卡纸我也要大惊小怪地跑回办公室求助,闹了不少笑话。所幸同事们都很热心,一一耐心地帮我解决了,现在我已经可以自行处理类似的问题了。

在办公室的实习忙碌而充实,积累了不少实践经验,领导们也很关心我的实习,告知我做行政工作最重要的是文书的处理和人际关系的协调。在以后的实习工作中,会注意运用应用文体的写作和好好处理人际关系,希望可以学到更多有用实在的经验,早早具备立足社会的能力。

下载基于linphone实现视频通话小结word格式文档
下载基于linphone实现视频通话小结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    观看《食品安全教育专题片》视频小结

    观看《食品安全教育专题片》视频小结 一年级3班 食品安全直接关系到广大师生的身体健康和生命安全。为了提高学校师生参与食品安全的意识,普及食品安全科学知识。根据上级文......

    基于ARM的视频采集系统的设计与实现

    基于ARM的视频采集系统的设计与实现 摘要 本文根据家庭视频采集系统的要求,提出一种基于ARM的网络视频采集方案。方案要求视频的实时传输、实时监控。本系统以Intel Xscale......

    2016年安全生产管理:预警系统的实现(小结)

    2016年安全生产管理:预警系统的实现(小结) 一、单项选择题(共 25题,每题2分,每题的备选项中,只有1个事最符合题意) 1、不属于《煤矿安全监察员管理暂行办法》规定的煤矿安全监察......

    《数字信号处理原理及实现》课程小结

    时间过得好快,转眼半学期结束了。这半学期数字信号的学习让我受益匪浅。前两章和信号与线性系统相关,介绍了离散时间信号与系统的时域分析方法最深刻的是采样,时域采样定理与采......

    基于ThinkPHP框架的视频教学网站的设计和实现

    基于ThinkPHP框架的视频教学网站的设计和实现 摘 要:旨在提高高校学生课余时间学习效率,采用PHP语言,基于MVC模式的ThinkPHP框架,搭配MySQL数据库,开发了一个视频教学网站。网站......

    高速公路视频监控点建设铺开 将实现京津全覆盖

    高速公路视频监控点建设铺开 将实现京津全覆盖 如今我们发现道路上的摄像探头越来越多。据不完全统计,仅仅在北京市朝阳区一个区就有超过9200个摄像头,全北京的摄像头数量达到......

    物流网站设计与实现毕业论文小结表

    南京信息工程大学滨江学院 毕业论文(设计)小结表 学生姓名 杨金磊 学号 20092309022 院、系 滨江学院 专业、班级 信息工程(1)班(目标完成情况,业务能力,工作态度,遵守纪律,存......

    Java登陆验证模块的实现及小结

    登陆验证模块的实现 登陆页面验证首先是验证账号, 验证码是否填写,密码长度是否符合要求,验证码是否正确。这几个验证是通过自定义的几个$.fn扩展函数实现的($.fn.remote=Func......