1.                   在sdp中添加视频信息

添加sdp信息中的视频部分主要通过下面两个步骤处理。

1.1               在Invite消息的sdp中添加视频信息

主要在endpoint.c的pjmedia_endpt_create_sdp()函数中添加。具体的可以看其中的代码,以及代码中的注释。

注意pjmedia_endpt_create_sdp( pjmedia_endpt *endpt,

pj_pool_t *pool,

unsigned stream_cnt,

const pjmedia_sock_info sock_info[2],

pjmedia_sdp_session **p_sdp )函数的第三个参数stream_cnt,第四个参数sock_info在使用pjsua_media_channel_create_sdp()调用时,重新调整了输入的参数值。

1.2               sdp信息中视频的rtp端口的生成

在pjus_media.c文件中的pjsua_media_subsys_start()函数使用pjsua_media_transports_create添加创建rtp要使用的transport端口(也就是socket端口)。这样在1中的sdp信息中就可以获取到视频通讯的本地创建的rtp端口。

2.                   视频处理模块的添加

视频处理模块主要完成视频的采集、编码、解码、回放、以及将数据送给rtp或者从rtp获取到数据的功能。其工程为pjmedia-videodev。

CCameraMgr主要实现摄像头的管理功能。如果移植mobile可以考虑修改这部分。

CCodecVideo主要实现视频编解码的功能。如果添加H.263、H.264编解码可以直接修改这部分代码。

CCodecDataChannel主要实现整个视频模块的管理功能。视频的采集、编码、解码、回放、以及将数据送给rtp或者从rtp获取到数据的功能。

Videodev主要实现pjmedia-videodev对Pjsip的外部接口功能。这些接口可以根据需要继续添加。目前应该够用。具体实现见注释。

注意这部分跟rtp交互的接口主要通过两个函数实现。Rtp模块通过pjmedia_video_query_frame_attach接口将回调设置到Pjmedia-videdev模块。Pjmedia-videodev模块,在获取到编码数据后,通过put_frame_video_data将数据送给pjmedia的rtp层,进行rtp打包传输。

3.                   视频收发以及回放

3.1               rtp发送

在stream.c中pjmedia_stream_create_video处理过程中通过调用pjmedia_video_query_frame_attach将回调函数设置给pjmedia-videodev模块。这样,在启动视频工作线程后,就可以通过put_frame_video_data源源不断的将编码后的数据送给stream.c的rtp的put_frame_video接口进行视频的rtp发送。注意这里对于视频包需要拆包处理。

3.2               Rtp接收

对于从rtp接收到的数据。都在stream.c的on_rx_rtp回调来处理。这里处理了视频和音频以及dtmf数据。我们对于解析后pt类型为34(H.263)、31(H.261)的数据直接进行视频处理on_rx_video_rtp。通过on_rx_video_rtp将接收到的视频数据写入pjmedia-videodev的Jitterbuffer(NetPool)中,这样就完成了rtp数据接收视频数据源源不断的输入到pjmedia-videodev模块。

3.3               远端视频回放

对于接收到的视频数据,已经放入netpool中。我们通过启动本地线程不断地从缓冲中获取到数据(视频数据需要重新组赈,然后解码回放),这个通过CCocecDataChnanel:: ShowRemoteVideo来实现。

3.4               本地视频回放

这个简单,也就是直接获取到摄像头的数据,在本地显示的过程。主要通过CCodecDataChannl:: ShowLocalVideo来实现。

4.                   视频工作线程

4.1               发送线程

worker_proc_video主要完成对pjmedia-videdev的pjmedia_video_get_frame_and_send接口的调用。完成视频采集编码并将数据送给rtp的过程。这里注意,对于在pjsip工程中的线程,必须使用pj_thread_create创建,例如:

//add with lianhy in 20090902 创建视频工作线程

status = pj_thread_create( endpt->pool, "video", &worker_proc_video,

endpt, 0, 0, &endpt->thread_video);

4.2               接收以及回放线程

主要通过Pjmedia-vidodev的接口pjmedia_video_query_frame_start来启动。当然对应的停止应该是pjmedia_video_query_frame_stop。

对于以上说的线程以及socket、session、mediapoint的创建,注意一定要释放(销毁)。

关于在pjsip中添加视频的流程说明相关推荐

  1. 2020-04-19-如何在博客中添加视频链接

    layout title subtitle date author preview-img header-img catalog istop music-id music-idfull apserve ...

  2. 在HTML中添加视频的代码

    在HTML中添加视频的代码 自动载入视频 与音乐的播放一样,我们可以使用EMBED标签播放视频, <EMBED SRC="http://blog.163.com/qianxue126@ ...

  3. 【杂志制作软件】名编辑电子杂志大师教程 | 如何在电子杂志中添加视频?

    名编辑电子杂志大师可以轻松的在电子杂志页面中添加您想添加的视频或者Flash文件. 在此给您介绍下如何一步一步的完成在电子杂志中添加视频: 第一步:打开名编辑电子杂志大师,导入您需要编辑的PDF杂志文 ...

  4. 名编辑电子杂志大师教程 | 如何在电子宣传册中添加视频按钮

    使用名编辑电子杂志大师,您可以轻松的在电子杂志页面中添加您想添加的视频或者Flash文件. 在此给您介绍下如何一步一步的完成在电子杂志中添加视频: 第一步:打开名编辑电子杂志大师,导入您需要编辑的PD ...

  5. 名编辑电子杂志大师教程 | 如何在电子宣传册中添加视频按钮?

    名编辑电子杂志大师具有视频按钮功能,您可以够在您的电子宣传册任何一个页面中嵌入视频按钮来播放安全视频. 点击视频按钮之后,您的安全视频将会以弹窗的形式展示出来! 下面就给您介绍下如何在电子宣传册中添加 ...

  6. 在verto_communicator中添加视频floor轮询功能

    只是实现了简单的视频轮询功能,还需要修改完善!!! 1.在src/partials/chat.html中添加 <div><p>{{num}}</p><butt ...

  7. 如何在word中添加视频

    这两天由于工作需要,要写一关于gis功能的说明文档,为了能够更加形象,想要将一些操作过程录制为视频添加到word文档中. 刚开始的做法是将视频文件拖到word文档中,实践证明该视频确实可以在word中 ...

  8. html添加背景音乐记事本,肿么在用记事本写的html网页中添加视频

    HTML网页中插入视频方法: 1.用object 标签 objecthttp://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf. ...

  9. 使用Markdown语言在博客的文章中添加视频

    注:此博文来自转载, 在此对原作者表示感谢. 不论你是用的是什么博客系统,WP也好,Typecho也罢,甚至是静态博客,就像我的博客,绕不开的是两种书写语言,一种称之为富文本,一种叫做Markdown ...

最新文章

  1. Element 2.6.0 发布,基于 Vue 2.0 的桌面端组件库
  2. python scipy卷积 图像卷积
  3. Oracel 修改约束命令
  4. jquery.easyui常用示例
  5. 程序员想趁头发还在找个女友,标准:是女的就行
  6. c语言编写弹窗提示是否确认退出_弹窗设计的5条基本原则
  7. 150家通用经销商决定退出凯迪拉克品牌 因不愿投资于销售电动车
  8. c语言链表二路归并排序,链表的二路归并排序 Sort List
  9. linux 终止一个前台进程,Linux中前台起动的进程怎么结束?
  10. Microsoft Visual C++ 6.0预处理器参考手册
  11. 【Babel】1145- 非常不错的 Babel 插件开发教程
  12. 玩客云小盒子安装点心云,实现闲置宽带共享。
  13. Java Pair类的使用
  14. Java读取数据库的数据并转换为json数据
  15. Opencv Surf特征实现图像无缝拼接生成全景图像(三)
  16. 人生总在不断的折腾,你不折腾,就要被折腾......
  17. OpenCV入门——基本图像操作
  18. My97DatePicker 日期控制,开始时间不能大于结束时间,结束时间不能小于开始时间
  19. 淘客是什么 淘客怎么做
  20. hadoop之使用LZO压缩文件并支持分片

热门文章

  1. java 8 删选集合 和取集合中的字段重组成集合的使用
  2. static class 静态类(Java)
  3. 【移植驱动到Linux3.4.2内核之一】移植DM9000C网卡驱动
  4. 线程安全-常用的模式
  5. 云开发的数据库权限机制解读丨云开发101
  6. for in / for of 要会用
  7. keras中的mini-batch gradient descent (转)
  8. kendo 服务端排序
  9. 【转】android程序连接网络出现android.os.NetworkOnMainThreadExceptionat
  10. Direct3D中的绘制(3)