📄 linux下的实时流媒体编程.html
字号:
char* errstr = RTPGetErrorString(err); printf("Error:%s\\n", errstr); exit(-1); }}int main(int argc, char** argv){ RTPSession sess; unsigned long destip; int destport; int portbase = 6000; int status, index; char buffer[128]; if (argc != 3) { printf("Usage: ./sender destip destport\\n"); return -1; } // 获得接收端的IP地址和端口号 destip = inet_addr(argv[1]); if (destip == INADDR_NONE) { printf("Bad IP address specified.\\n"); return -1; } destip = ntohl(destip); destport = atoi(argv[2]); // 创建RTP会话 status = sess.Create(portbase); checkerror(status); // 指定RTP数据接收端 status = sess.AddDestination(destip, destport); checkerror(status); // 设置RTP会话默认参数 sess.SetDefaultPayloadType(0); sess.SetDefaultMark(false); sess.SetDefaultTimeStampIncrement(10); // 发送流媒体数据 index = 1; do { sprintf(buffer, "%d: RTP packet", index ++); sess.SendPacket(buffer, strlen(buffer)); printf("Send packet !\\n"); } while(1); return 0;}</code></pre></td></tr></tbody></table><p>清单4则给出了数据接收端的完整代码,它负责从指定的端口不断地读取RTP数据包:</p><p>代码清单4:receiver.cpp</p><table bgcolor="#cccccc" border="1" cellpadding="5" cellspacing="0" width="100%"><tbody><tr><td><pre><code>#include <stdio.h>#include "rtpsession.h"#include "rtppacket.h"// 错误处理函数void checkerror(int err){ if (err < 0) { char* errstr = RTPGetErrorString(err); printf("Error:%s\\n", errstr); exit(-1); }}int main(int argc, char** argv){ RTPSession sess; int localport; int status; if (argc != 2) { printf("Usage: ./sender localport\\n"); return -1; } // 获得用户指定的端口号 localport = atoi(argv[1]); // 创建RTP会话 status = sess.Create(localport); checkerror(status); do { // 接受RTP数据 status = sess.PollData(); // 检索RTP数据源 if (sess.GotoFirstSourceWithData()) { do { RTPPacket* packet; // 获取RTP数据报 while ((packet = sess.GetNextPacket()) != NULL) { printf("Got packet !\\n"); // 删除RTP数据报 delete packet; } } while (sess.GotoNextSourceWithData()); } } while(1); return 0;}</code></pre></td></tr></tbody></table><p>本文源码<a href="http://www-900.ibm.com/developerWorks/cn/linux/l-mdst/code.zip">下载</a> </p><p><a name="3"><span class="atitle2">四、小结</span></a></p><p>随着多媒体数据在Internet上所承担的作用变得越来越重要,需要实时传输音频和视频等多媒体数据的场合也将变得越来越多,如IP电话、视频点播、在线会议等。RTP是用来在Internet上进行实时流媒体传输的一种协议,目前已经被广泛地应用在各种场合,JRTPLIB是一个面向对象的RTP封装库,利用它可以很方便地完成Linux平台上的实时流媒体编程。</p><p><a name="4"><span class="atitle2">五、参考资源</span></a></p><p>1. 在JRTPLIB的网站http://lumumba.luc.ac.be/jori/jrtplib/jrtplib.html上,可以下载到JRTPLIB最新的源码包,并且还能找到一些与RTP相关的资源。</p><p>2. 顾淑珍等编著,宽带增值服务开发实例,北京:机械工业出版社,2002</p><p>3. 黄永峰等编著,IP网络多媒体通信技术,北京:人民邮电出版社,2003</p><!-- AUTHOR BIOS--><!-- Make author heading singular or plural as needed--><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><a name="authorname"><span class="atitle2">关于作者</span></a><br><!-- about author begin--><p>本文作者肖文鹏是一名自由软件爱好者,主要从事操作系统和分布式计算环境的研究,喜爱Linux和Python。你可以通过<a href="mailto:xiaowp@263.net">xiaowp@263.net</a>与他取得联系,也可以在网站<a href="http://www.linuxgam.com/">http://www.linuxgam.com</a>上就本文同他做进一步的交流。目前他正致力于OpenEC项目的开发,旨在将Linux推向家庭娱乐领域,你可以从网站<a href="http://www.openec.org.cn/">http://www.openec.org.cn</a>了解到该项目的当前进展和最新成果。</p><!-- about author end--></td></tr></tbody></table></td><td width="10"><img alt="" src="Linux%E4%B8%8B%E7%9A%84%E5%AE%9E%E6%97%B6%E6%B5%81%E5%AA%92%E4%BD%93%E7%BC%96%E7%A8%8B_files/c.gif" border="0" height="1" width="10"></td></tr></tbody></table><!-- END PAPER BODY--><br clear="all"><img alt="" src="Linux%E4%B8%8B%E7%9A%84%E5%AE%9E%E6%97%B6%E6%B5%81%E5%AA%92%E4%BD%93%E7%BC%96%E7%A8%8B_files/c.gif" border="0" height="10" width="100"><br><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="right" width="100%"><a href="#top">到页首</a></td><td width="5"><img alt="" src="Linux%E4%B8%8B%E7%9A%84%E5%AE%9E%E6%97%B6%E6%B5%81%E5%AA%92%E4%BD%93%E7%BC%96%E7%A8%8B_files/c.gif" border="0" height="1" width="5"></td></tr><tr valign="top"><td colspan="2" bgcolor="#000000"><img alt="" src="Linux%E4%B8%8B%E7%9A%84%E5%AE%9E%E6%97%B6%E6%B5%81%E5%AA%92%E4%BD%93%E7%BC%96%E7%A8%8B_files/c.gif" border="0" height="1" width="100"></td></tr><tr valign="top"><td colspan="2" bgcolor="#ffffff"><img alt="" src="Linux%E4%B8%8B%E7%9A%84%E5%AE%9E%E6%97%B6%E6%B5%81%E5%AA%92%E4%BD%93%E7%BC%96%E7%A8%8B_files/c.gif" border="0" height="8" width="100"></td></tr></tbody></table><table border="0" cellpadding="10" cellspacing="0" width="100%"><tbody><tr valign="top"><td><form action="/developerWorks/cn/cnratings.nsf/RateArticle?CreateDocument" method="post" name="getURL"><input name="ArticleTitle" value="Linux下的实时流媒体编程" type="hidden"><input name="url" value="http://www-900.ibm.com/developerWorks/cn/linux/l-mdst/index.shtml" type="hidden"><script language="javascript">getURL();</script><input name="Zone" value="linux" type="hidden"> <input name="RedirectURL" value="/developerWorks/cn/thankyou/feedback-linux.html" type="hidden"><a name="rating"><b>您对这篇文章的看法如何?</b></a><table border="0" cellpadding="0" cellspacing="0" width="600"><tbody><tr><td colspan="5"><img alt="" src="Linux%E4%B8%8B%E7%9A%84%E5%AE%9E%E6%97%B6%E6%B5%81%E5%AA%92%E4%BD%93%E7%BC%96%E7%A8%8B_files/c.gif" border="0" height="8" width="100"></td></tr><tr valign="top"><td width="16%"><input name="Rating" value="5" type="radio">真棒!(5)</td><td width="20%"><input name="Rating" value="4" type="radio">好材料 (4)</td><td width="24%"><input name="Rating" value="3" type="radio">一般;尚可 (3)</td><td width="22%"><input name="Rating" value="2" type="radio">需提高 (2)</td><td width="18%"><input name="Rating" value="1" type="radio">太差! (1)</td></tr></tbody></table><br><b>建议?</b><br><textarea cols="60" name="Comments" rows="5" wrap="virtual"></textarea><br><br><input value="提交反馈意见" type="submit"></form></td></tr><tr valign="top"><td bgcolor="#ffffff"><img alt="" src="Linux%E4%B8%8B%E7%9A%84%E5%AE%9E%E6%97%B6%E6%B5%81%E5%AA%92%E4%BD%93%E7%BC%96%E7%A8%8B_files/c.gif" border="0" height="8" width="100"></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="right">(c) Copyright IBM Corp. 2001, (c) Copyright IBM China 2001, All Right Reserved</td></tr><tr valign="top"><td class="bbg" height="21"> <a href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/index.shtml&origin=dwhead" class="mainlink">关于 IBM</a><span class="divider"> | </span><a href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/privacy/index.shtml&origin=dwhead" class="mainlink">隐私条约</a><span class="divider"> | </span><a href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/legal/index.shtml&origin=dwhead" class="mainlink">使用条款</a><span class="divider"> | </span><a href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/contact/index.shtml&origin=dwhead" class="mainlink">联系 IBM</a></td></tr></tbody></table><script type="text/javascript" language="JavaScript1.2" src="Linux%E4%B8%8B%E7%9A%84%E5%AE%9E%E6%97%B6%E6%B5%81%E5%AA%92%E4%BD%93%E7%BC%96%E7%A8%8B_files/stats.js"></script><noscript><img src="//stats.www.ibm.com/rc/images/uc.GIF?R=noscript" width="1" height="1" alt="" border="0" /></noscript></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -