C++流媒体解码编程技巧讨论.doc_第1页
C++流媒体解码编程技巧讨论.doc_第2页
C++流媒体解码编程技巧讨论.doc_第3页
C++流媒体解码编程技巧讨论.doc_第4页
C++流媒体解码编程技巧讨论.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

转帖C+流媒体解码编程技巧讨论 洳既往噯伱 0位粉丝 1楼话说C/C+以速度快,性能高而著称,C/C+本质是一种中级的计算机程序设计语言,它即保证了类似低级汇编语言效率,同时也坚固类似高级语言所具有的特点,C/C+的程序编写不依赖于计算机的硬件,所以你即可以拿它来编写系统软件,也可以用来开发应用软件,它的应用越乎我们的想像,除了PC机上的开发外,也被广泛的用在单片机,嵌入式等手机开发等领域,目前市场上流行的大部分程序都是建立在C语言的基础上来完成的 2009-10-15 11:05 回复 洳既往噯伱 0位粉丝 2楼嘿嘿,接楼上。现在”3G网络”的概念成为了人们对未来网络最常见的一种说法,不过什么是3g呢,其实它的全称为3rdGeneration,即第三代数字通信。它能够处理比以前更多的服务,如图像,音视频等多种多媒体形式提供给用户,而它和前两代的唯一区别就是3G网络最大的速率可以达到2Mbps,远远超过了前两代网络,这使得手机影院等大数据流应用,可以实现,为用户带来更好的移动体验。电信运营商及通信设备制造商都非常关注。3G网络的到来,为移运运营商提供了商机,目前中国三个运营商纷纷引入自己的3g标准,其中,移动做为3g的先导者,自然不会错失这个机会,在今年08年推出了自己的手机系统OPhoneOS平台,OPhoneOS平台本身是基于Linux开放系统所设计,并不断的完善,相信不少见过OPhoneOS手机的用户都被它的惊人的人性化界面所打动,其实OPhoneOS系统所拥有的不单单是这些,为了极大的满足人们日益的需求,OPhoneOS平台除保留了Gmail,Gtalk等原有业务外,还内置了中国移动的全部增值服务,为用户提供了更贴心的体验。同时移动还推出了线上软件销售商店MobileMarket,为个人和公司提供了面向移动拥有的5亿手机用户和庞大商业客户的销售机会。这样看来,手机上的个人娱乐软件和商业管理软件,如果中国移动大力推动,会带来很大市场。联通、电信虽然手机用户规模相对小些,但相信也会大力发展。这也是我为什么要在下面向大家,以OPhone平台为例,介绍移动平台上流媒体编成的技巧。话说回来,和Linux一样,OPhoneOS保留了原有的开发语言C/C+,Java,不过OPhoneOS对其进行了极大的优化,C/C+虽然效率高,不过这样并不安全,因为恶意的程序,会使得系统变得不安全,Java虽然很安全,不过效率太低,不利于大的项目开发,而且单纯的Java程序并不能完成一些特定的任务,在这种情况下,OPhoneOS平台寻求到了完美的解决方案,JNI(JavaNativeInterface,Java本地化方法)技术运用而生,JNI简单的说,是让C/C+做完底层开发,并为Java提供接口以为调用,这样,JNI方式即不失低效率,也保证了平台安全性 2009-10-15 11:06 回复 o012340ofei 41位粉丝 3楼楼主太监了 这条留言是通过手机发表的,我也要用手机发表留言! 2009-10-15 11:13 回复 洳既往噯伱 0位粉丝 4楼OPhoneOS平台的流媒体支持OpenCore模块为OPhoneOS平台提供了核心的多媒体支持,它处于整个平台的Libraries层,以os的方式为上层语言提供服务,OpenCore主要是用C/C+来实现,开发者可以修改及移植别的编/解码器,然后通过上层软件使用,OpenCore不能直接被用户所使用,必需借住其它的方式调用,如Java的JNI方式,OpenCore模块内置了OpenMAX1Linterface接口进行扩展,这种技术分离了具体硬件的依赖,方便了开发者的移植,目前OPhoneOS平台提供了3GP,MP4,ACV等媒体格式的支持,如果是在线看的话,还支持http,rtp等协议OPhoneOS媒体源码文件曾经写过一个关于音频部分的,介绍过如何下载这部分的源码,接着我简单讲一下相关的C代码Opencore目录包括了所有关于媒体方面的源码,其中最重要的是android,engines和codecs_v2,protocols四个目录,android主要包括了一些纯虚类,为适配器,engines为媒体引擎部分,主要是OPhoneOS平台内置的编解码程序,后一个为第三方所提供,为OPhoneOS系统的扩展应用,protocols目录里提供了在线流媒体的协议,包括http,rtp,rtsp,我们重点说一下protocols的结构,(代码太长,分段了。) 2009-10-15 11:14 回复 洳既往噯伱 0位粉丝 5楼opencoreprotocolshttp_parcomincludehttp_composer.h头文件中enumHTTPVersionHTTP_V1_0=0,HTTP_V1_1;/HTTPMethodenumenumHTTPMethodHTTP_METHOD_GET=0,/bothHTTP1.0andHTTP1.1HTTP_METHOD_HEAD,/bothHTTP1.0andHTTP1.1HTTP_METHOD_POST,/bothHTTP1.0andHTTP1.1HTTP_METHOD_DELETE,/bothHTTP1.0andHTTP1.1HTTP_METHOD_LINK,/HTTP1.0onlyHTTP_METHOD_UNLINK,/HTTP1.0onlyHTTP_METHOD_OPTIONS,/HTTP1.1onlyHTTP_METHOD_PUT,/HTTP1.1onlyHTTP_METHOD_TRACE,/HTTP1.1onlyHTTP_METHOD_CONNECT,/HTTP1.1only;列出来http协议下流媒体的支持的http协议为1.0和1.1,从中我们可以看出来,OPhoneOS媒体部分支持Get和Post方式播放数据 2009-10-15 11:16 回复 洳既往噯伱 0位粉丝 6楼还是太长,疯了下面我们来通过Java的JNI方式去调用,我们以SDK中的MediaPlayerDemo_Video.java说明packagecom.example.android.apis.media;importcom.example.android.apis.R;importcom.example.android.apis.app.AlarmController;importandroid.app.Activity;importandroid.graphics.PixelFormat;importandroid.media.AudioManager;importandroid.media.MediaPlayer;importandroid.media.MediaPlayer.OnBufferingUpdateListener;importandroid.media.MediaPlayer.OnCompletionListener;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.SurfaceHolder;importandroid.view.SurfaceView;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.Toast;publicclassMediaPlayerDemo_VideoextendsActivityimplementsOnBufferingUpdateListener,OnCompletionListener,MediaPlayer.OnPreparedListener,SurfaceHolder.CallbackprivatestaticfinalStringTAG=MediaPlayerDemo;privateintmVideoWidth;privateintmVideoHeight;privateMediaPlayermMediaPlayer;privateSurfaceViewmPreview;privateSurfaceHolderholder;privateStringpath;privateBundleextras;privatestaticfinalStringMEDIA=media;privatestaticfinalintLOCAL_AUDIO=1;privatestaticfinalintSTREAM_AUDIO=2;privatestaticfinalintRESOURCES_AUDIO=3;privatestaticfinalintLOCAL_VIDEO=4;privatestaticfinalintSTREAM_VIDEO=5;/*Calledwhentheactivityisfirstcreated.*/publicvoidonCreate(Bundleicicle)super.onCreate(icicle);setContentView(R.layout.mediaplayer_2);mPreview=(SurfaceView)findViewById(R.id.surface);holder=mPreview.getHolder();holder.addCallback(this);holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);extras=getIntent().getExtras(); 2009-10-15 11:18 回复 洳既往噯伱 0位粉丝 7楼privatevoidplayVideo(IntegerMedia)tryswitch(Media)caseLOCAL_VIDEO:/*TODO:Setthepathvariabletoalocalmediafilepath.*/path=;if(path=)/TelltheusertoprovideamediafileURL.Toast.makeText(MediaPlayerDemo_Video.this,PleaseeditMediaPlayerDemo_VideoActivity,+andsetthepathvariabletoyourmediafilepath.+Yourmediafilemustbestoredonsdcard., 2009-10-15 11:19 回复 洳既往噯伱 0位粉丝 9楼.makeText(MediaPlayerDemo_Video.this,PleaseeditMediaPlayerDemo_VideoActivity,+andsetthepathvariabletoyourmediafileURL.,Toast.LENGTH_LONG).show();break;/CreateanewmediaplayerandsetthelistenersmMediaPlayer=newMediaPlayer();mMediaPlayer.setDataSource(path);mMediaPlayer.setDisplay(holder);mMediaPlayer.prepare();mMediaPlayer.setOnBufferingUpdateListener(this);mMediaPlayer.setOnCompletionListener(this);mMediaPlayer.setOnPreparedListener(this);mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);catch(Exceptione)Log.e(TAG,error:+e.getMessage(),e);publicvoidonBufferingUpdate(MediaPlayerarg0,intpercent)Log.d(TAG,onBufferingUpdatepercent:+percent); 2009-10-15 11:19 回复 洳既往噯伱 0位粉丝 10楼publicvoidonCompletion(MediaPlayerarg0)Log.d(TAG,onCompletioncalled);publicvoidonPrepared(MediaPlayermediaplayer)Log.d(TAG,onPreparedcalled);mVideoWidth=mMediaPlayer.getVideoWidth();mVideoHeight=mMediaPlayer.getVideoHeight();if(mVideoWidth!=0&mVideoHeight!=0)holder.setFixedSize(mVideoWidth,mVideoHeight);mMediaPlayer.start();publicvoidsurfaceChanged(SurfaceHoldersurfaceholder,inti,intj,intk)Log.d(TAG,surfaceChangedcalled);publicvoidsurfaceDestroyed(SurfaceHoldersurfaceholder)Log.d(TAG,surfaceDestroyedcalled);publicvoidsurfaceCreated(SurfaceHolderholder)/TODOAuto-generatedmethodstubLog.d(TAG,surfaceCreatedcalled);playVideo(extras.getInt(MEDIA); 2009-10-15 11:20 回复 洳既往噯伱 0位粉丝 12楼接楼上,代码续OPhoneOS平台的流媒体支持OpenCore模块为OPhoneOS平台提供了核心的多媒体支持,它处于整个平台的Libraries层,以os的方式为上层语言提供服务,OpenCore主要是用C/C+来实现,开发者可以修改及移植别的编/解码器,然后通过上层软件使用,OpenCore不能直接被用户所使用,必需借住其它的方式调用,如Java的JNI方式,OpenCore模块内置了OpenMAX1Linterface接口进行扩展,这种技术分离了具体硬件的依赖,方便了开发者的移植,目前OPhoneOS平台提供了3GP,MP4,ACV等媒体格式的支持,如果是在线看的话,还支持http,rtp等协议OPhoneOS媒体源码文件曾经写过一个关于音频部分的,介绍过如何下载这部分的源码,接着我简单讲一下相关的C代码Opencore目录包括了所有关于媒体方面的源码,其中最重要的是android,engines和codecs_v2,protocols四个目录,android主要包括了一些纯虚类,为适配器,engines为媒体引擎部分,主要是OPhoneOS平台内置的编解码程序,后一个为第三方所提供,为OPhoneOS系统的扩展应用,protocols目录里提供了在线流媒体的协议,包括http,rtp,rtsp,我们重点说一下protocols的结构,opencoreprotocolshttp_parcomincludehttp_composer.h头文件中enumHTTPVersionHTTP_V1_0=0,HTTP_V1_1;/HTTPMethodenumenumHTTPMethodHTTP_METHOD_GET=0,/bothHTTP1.0andHTTP1.1HTTP_METHOD_HEAD,/bothHTTP1.0andHTTP1.1HTTP_METHOD_POST,/bothHTTP1.0andHTTP1.1HTTP_METHOD_DELETE,/bothHTTP1.0andHTTP1.1HTTP_METHOD_LINK,/HTTP1.0onlyHTTP_METHOD_UNLINK,/HTTP1.0onlyHTTP_METHOD_OPTIONS,/HTTP1.1onlyHTTP_METHOD_PUT,/HTTP1.1onlyHTTP_METHOD_TRACE,/HTTP1.1onlyHTTP_METHOD_CONNECT,/HTTP1.1only;列出来http协议下流媒体的支持的http协议为1.0和1.1,从中我们可以看出来,OPhoneOS媒体部分支持Get和Post方式播放数据下面我们来通过Java的JNI方式去调用,我们以SDK中的MediaPlayerDemo_Video.java说明packagecom.example.android.apis.media;importcom.example.android.apis.R;importcom.example.android.apis.app.AlarmController; 2009-10-15 12:09 回复 洳既往噯伱 0位粉丝 13楼importandroid.app.Activity;importandroid.graphics.PixelFormat;importandroid.media.AudioManager;importandroid.media.MediaPlayer;importandroid.media.MediaPlayer.OnBufferingUpdateListener;importandroid.media.MediaPlayer.OnCompletionListener;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.SurfaceHolder;importandroid.view.SurfaceView;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.Toast;publicclassMediaPlayerDemo_VideoextendsActivityimplementsOnBufferingUpdateListener,OnCompletionListener,MediaPlayer.OnPreparedListener,SurfaceHolder.CallbackprivatestaticfinalStringTAG=MediaPlayerDemo;privateintmVideoWidth;privateintmVideoHeight;privateMediaPlayermMediaPlayer;privateSurfaceViewmPreview;privateSurfaceHolderholder;privateStringpath;privateBundleextras;privatestaticfinalStringMEDIA=media;privatestaticfinalintLOCAL_AUDIO=1;privatestaticfinalintSTREAM_AUDIO=2;privatestaticfinalintRESOURCES_AUDIO=3;privatestaticfinalintLOCAL_VIDEO=4;privatestaticfinalintSTREAM_VIDEO=5;/*Calledwhentheactivityisfirstcreated.*/publicvoidonCreate(Bundleicicle)super.onCreate(icicle);setContentView(R.layout.mediaplayer_2);mPreview=(SurfaceView)findViewById(R.id.surface);holder=mPreview.getHolder();holder.addCallback(this);holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);extras=getIntent().getExtras(); 2009-10-15 12:09 回复 洳既往噯伱 0位粉丝 14楼privatevoidplayVideo(IntegerMedia)tryswitch(Media)caseLOCAL_VIDEO:/*TODO:Setthepathvariabletoalocalmediafilepath.*/path=;if(path=)/TelltheusertoprovideamediafileURL.Toast.makeText(MediaPlayerDemo_Video.this,PleaseeditMediaPlayerDemo_VideoActivity,+andsetthepathvariabletoyourmediafilepath.+Yourmediafilemustbestoredonsdcard., 2009-10-15 12:09 回复 洳既往噯伱 0位粉丝 16楼.makeText(MediaPlayerDemo_Video.this,PleaseeditMediaPlayerDemo_VideoActivity,+andsetthepathvariabletoyourmediafileURL.,Toast.LENGTH_LONG).show();break;/CreateanewmediaplayerandsetthelistenersmMediaPlayer=newMediaPlayer();mMediaPlayer.setDataSource(path);mMediaPlayer.setDisplay(holder);mMediaPlayer.prepare();mMediaPlayer.setOnBufferingUpdateListener(this);mMediaPlayer.setOnCompletionListener(this);mMediaPlayer.setOnPreparedListener(this);mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);catch(Exceptione)Log.e(TAG,error:+e.getMessage(),e); 2009-10-15 12:09 回复 洳既往噯伱 0位粉丝 18楼下面我们来通过Java的JNI方式去调用,我们以SDK中的MediaPlayerDemo_Video.java说明packagecom.example.android.apis.media;importcom.example.android.apis.R;importcom.example.android.apis.app.AlarmController;importandroid.app.Activity;importandroid.graphics.PixelFormat;importandroid.media.AudioManager;importandroid.media.MediaPlayer;importandroid.media.MediaPlayer.OnBufferingUpdateListener;importandroid.media.MediaPlayer.OnCompletionListener;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.SurfaceHolder;importandroid.view.SurfaceView;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.Toast;publicclassMediaPlayerDemo_VideoextendsActivityimplementsOnBufferingUpdateListener,OnCompletionListener,MediaPlayer.OnPreparedListener,SurfaceHolder.CallbackprivatestaticfinalStringTAG=MediaPlayerDemo;privateintmVideoWidth;privateintmVideoHeight;privateMediaPlayermMediaPlayer;privateSurfaceViewmPreview;privateSurfaceHolderholder;privateStringpath;privateBundleextras;privatestaticfinalStringMEDIA=media;privatestaticfinalintLOCAL_AUDIO=1;privatestaticfinalintSTREAM_AUDIO=2;privatestaticfinalintRESOURCES_AUDIO=3;privatestaticfinalintLOCAL_VIDEO=4;privatestaticfinalintSTREAM_VIDEO=5;/*Calledwhentheactivityisfirstcreated.*/publicvoidonCreate(Bundleicicle)super.onCreate(icicle);setContentView(R.layout.mediaplayer_2);mPreview=(SurfaceView)findViewById(R.id.surface);holder=mPreview.getHolder();holder.addCallback(this); 2009-10-15 12:09 回复 洳既往噯伱 0位粉丝 19楼holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);extras=getIntent().getExtras();privatevoidplayVideo(IntegerMedia)tryswitch(Media)caseLOCAL_VIDEO:/*TODO:Setthepathvariabletoalocalmediafilepath.*/path=;if(path=)/TelltheusertoprovideamediafileURL.Toast.makeText(MediaPlayerDemo_Video.this,PleaseeditMediaPlayerDemo_VideoActivity,+andsetthepathvariabletoyourmediafilepath.+Yourmediafilemustbestoredonsdcard., 2009-10-15 12:09 回复 洳既往噯伱 0位粉丝 21楼.makeText(MediaPlayerDemo_Video.this,PleaseeditMediaPlayerDemo_VideoActivity,+andsetthepathvariabletoyourmediafileURL.,Toast.LENGTH_LONG).show();break;/CreateanewmediaplayerandsetthelistenersmMediaPlayer=newMediaPlayer();mMediaPlayer.setDataSource(path);mMediaPlayer.setDisplay(holder);mMediaPlayer.prepare();mMediaPlayer.setOnBufferingUpdateListener(this);mMediaPlayer.setOnCompletionListener(this);mMediaPlayer.setOnPreparedListener(this);mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);catch(Exceptione)Log.e(TAG,error:+e.getMessage(),e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论