`

使用Live555类库实现的网络直播系统

 
阅读更多

Live555主要有四个类库:

libUsageEnvironment.lib;libliveMedia.lib;libgroupsock.lib;libBasicUsageEnvironment.lib

将这四个类库以及相关的头文件导入VC++2010之后,可以轻松实现网络直播系统。

在这里直接贴上完整代码,粘贴到VC里面就可以运行。

注:程序运行后,使用播放器软件(VLC Media Player,FFplay等),打开URL:rtp://239.255.42.42:1234,即可收看直播的视频。

 

// 网络直播系统.cpp : 定义控制台应用程序的入口点。
// 雷霄骅
// 中国传媒大学/数字电视技术
// leixiaohua1020@126.com

#include "stdafx.h"

#include "liveMedia.hh"
#include "BasicUsageEnvironment.hh"
#include "GroupsockHelper.hh"

//#define IMPLEMENT_RTSP_SERVER
//#define USE_SSM 1
#ifdef USE_SSM
Boolean const isSSM = True;
#else
Boolean const isSSM = False;
#endif



#define TRANSPORT_PACKET_SIZE 188
#define TRANSPORT_PACKETS_PER_NETWORK_PACKET 7


UsageEnvironment* env;
char const* inputFileName = "test.ts";
FramedSource* videoSource;
RTPSink* videoSink;

void play(); // forward

int main(int argc, char** argv) {
  // 首先建立使用环境:
  TaskScheduler* scheduler = BasicTaskScheduler::createNew();
  env = BasicUsageEnvironment::createNew(*scheduler);

  // 创建 'groupsocks' for RTP and RTCP:
  char const* destinationAddressStr
#ifdef USE_SSM
    = "232.255.42.42";
#else
    = "239.255.42.42";
  // Note: 这是一个多播地址。如果你希望流使用单播地址,然后替换这个字符串与单播地址  
#endif
  const unsigned short rtpPortNum = 1234;
  const unsigned short rtcpPortNum = rtpPortNum+1;
  const unsigned char ttl = 7; //


  struct in_addr destinationAddress;
  destinationAddress.s_addr = our_inet_addr(destinationAddressStr);
  const Port rtpPort(rtpPortNum);
  const Port rtcpPort(rtcpPortNum);

  Groupsock rtpGroupsock(*env, destinationAddress, rtpPort, ttl);
  Groupsock rtcpGroupsock(*env, destinationAddress, rtcpPort, ttl);
#ifdef USE_SSM
  rtpGroupsock.multicastSendOnly();
  rtcpGroupsock.multicastSendOnly();
#endif

  // 创建一个适当的“RTPSink”:

  videoSink =
    SimpleRTPSink::createNew(*env, &rtpGroupsock, 33, 90000, "video", "mp2t",
			     1, True, False /*no 'M' bit*/);


  const unsigned estimatedSessionBandwidth = 5000; // in kbps; for RTCP b/w share
  const unsigned maxCNAMElen = 100;
  unsigned char CNAME[maxCNAMElen+1];
  gethostname((char*)CNAME, maxCNAMElen);
  CNAME[maxCNAMElen] = '\0'; 
#ifdef IMPLEMENT_RTSP_SERVER
  RTCPInstance* rtcp =
#endif
    RTCPInstance::createNew(*env, &rtcpGroupsock,
			    estimatedSessionBandwidth, CNAME,
			    videoSink, NULL /* we're a server */, isSSM);
  // 开始自动运行的媒体

#ifdef IMPLEMENT_RTSP_SERVER
  RTSPServer* rtspServer = RTSPServer::createNew(*env);
  
  if (rtspServer == NULL) {
    *env << "Failed to create RTSP server: " << env->getResultMsg() << "\n";
    exit(1);
  }
  ServerMediaSession* sms
    = ServerMediaSession::createNew(*env, "testStream", inputFileName,
		   "Session streamed by \"testMPEG2TransportStreamer\"",
					   isSSM);
  sms->addSubsession(PassiveServerMediaSubsession::createNew(*videoSink, rtcp));
  rtspServer->addServerMediaSession(sms);

  char* url = rtspServer->rtspURL(sms);
  *env << "Play this stream using the URL \"" << url << "\"\n";
  delete[] url;
#endif

 
  *env << "开始发送流媒体...\n";
  play();

  env->taskScheduler().doEventLoop(); 

  return 0; // 只是为了防止编译器警告

}

void afterPlaying(void* /*clientData*/) {
  *env << "...从文件中读取完毕\n";

  Medium::close(videoSource);
  // 将关闭从源读取的输入文件

  play();
}

void play() {
  unsigned const inputDataChunkSize
    = TRANSPORT_PACKETS_PER_NETWORK_PACKET*TRANSPORT_PACKET_SIZE;

  // 打开输入文件作为一个“ByteStreamFileSource":

  ByteStreamFileSource* fileSource
    = ByteStreamFileSource::createNew(*env, inputFileName, inputDataChunkSize);
  if (fileSource == NULL) {
    *env << "无法打开文件 \"" << inputFileName
	 << "\" 作为 file source\n";
    exit(1);
  }

  
  videoSource = MPEG2TransportStreamFramer::createNew(*env, fileSource);

  
  *env << "Beginning to read from file...\n";
  videoSink->startPlaying(*videoSource, afterPlaying, videoSink);
}

 

完整工程下载地址:http://download.csdn.net/detail/leixiaohua1020/6272839


分享到:
评论

相关推荐

    C++ Live555 类库实现的网络直播系统

    C++ Live555 类库实现的网络直播系统。 Live555主要有四个类库: libUsageEnvironment.lib;libliveMedia.lib;libgroupsock.lib;libBasicUsageEnvironment.lib 将这四个类库以及相关的头文件导入VC++2010之后,...

    运用live555编译后的库实现demo调用例子

    Live555是由Live Networks开发的,它提供了C++类库,用于实现实时多媒体流传输服务。该库支持多种协议,包括RTSP、RTCP和RTP,使得开发者能够轻松地创建支持流媒体的应用程序。Live555库包含了处理各种网络事件、...

    live555在mips嵌入平台上的移植

    它包含了一系列用于实时媒体流处理的类库,如网络编程、媒体处理和控制等,适用于多种操作系统,包括Linux、Windows等。 嵌入式MIPS平台通常用于资源受限的设备,如网络摄像头、路由器或多媒体终端,这些设备可能...

    live555源码

    Live555使用标准的CMake构建系统,用户可以通过修改CMakeLists.txt文件来配置编译选项,适应不同的平台和需求。 7. **调试与测试** Live555提供了丰富的测试程序,如`testProgs`目录下的`testRTSPClient`和`...

    live555源代码

    【live555源代码】是流媒体领域中一个重要的开源项目,主要处理实时传输协议(RTSP)、实时传输协议(RTP)等网络通信。这个项目由liveMedia小组开发,提供了一整套用于实现多媒体流媒体服务器的C++类库。在【描述】...

    Android代码-集成安卓优秀开源类库

    首先,`MyLive-master`很可能是一个关于直播功能实现的开源项目,它可能包含了音频处理、视频编码、网络传输等关键模块。集成这样的类库,可以帮助开发者快速构建稳定且高效的直播应用。 1. **依赖管理**:在...

    基于Java的流媒体视频直播服务器设计与实现

    例如,可以使用Nginx作为反向代理,分发流量到多个Java服务实例,以提高系统的可用性。同时,通过监控工具如Prometheus和Grafana,实时监控服务器性能,确保服务质量。 总的来说,“基于Java的流媒体视频直播服务器...

    PTV 网络电视直播工具

    同时,利用.NET的System.Net命名空间,可以实现网络通信,获取和发送直播数据。此外,.NET的多媒体处理能力,如System.Media,有助于处理音频和视频内容。 网络电视的实现离不开流媒体技术。流媒体是指将连续的音频...

    Android高级应用源码-Red5+Android 直播系统的架构服务端的直播流工程.zip

    这个压缩包文件“Android高级应用源码-Red5+Android 直播系统的架构服务端的直播流工程.zip”是关于Android高级应用开发的一个实例,主要关注直播系统的设计和实现。这个项目结合了Red5服务器和Android客户端,构建...

    基于TTL返回值的网络主机操作系统识别

    在计算机网络中,"基于TTL返回值的网络主机操作系统识别"是一种技术,通过发送ICMP Echo Request(即PING)数据包并分析返回的TTL(Time To Live)字段来推断目标主机的操作系统类型。TTL是一个在网络包中设置的生存...

    实时网络流量监听,网络流量实时监控系统,C#

    在实现网络流量监听功能时,我们需要使用到操作系统提供的网络编程接口,例如Windows的WinPCap或Microsoft Network Monitor (MSNM) API。这些API允许程序捕获、过滤和分析网络数据包,从而获取网络活动的详细信息。...

    flash流媒体直播系统_dotnet影音娱乐网站.rar

    【描述】:“Flash流媒体直播系统_DotNet影音娱乐网站”是一个基于DotNet技术构建的在线影音娱乐平台,利用Flash技术实现流媒体直播功能。它允许用户实时观看视频内容,提供了一种互动性强、延迟低的直播体验。该...

    c#实现软件系统监控.zip

    本项目聚焦于使用C#编程语言来实现这样的系统监控工具,通过深入理解C#的核心特性和利用相关的框架与库,我们可以构建出强大的监控解决方案。 首先,我们要理解C#作为.NET Framework或.NET Core的主要开发语言,它...

    基于QT的网络视频监控系统.zip

    这个项目利用QT强大的GUI构建能力,设计并实现了一个网络视频监控系统,为用户提供实时视频流查看、录像回放以及录像存储等功能。 首先,我们需要理解QT框架的核心概念。QT基于C++语言,提供了丰富的类库,使得...

    监控系统, c#

    本项目聚焦于使用C#构建一个网络监控系统,它能够有效地管理和监控网络资源,确保系统的稳定运行和数据安全。 首先,让我们深入理解C#在监控系统中的应用。C#是微软公司推出的面向对象的编程语言,它支持.NET框架,...

    视频监控系统VC源码

    视频监控系统是现代安防技术的重要组成部分,它利用摄像头采集实时图像,通过数字信号处理和网络传输,实现远程监控和录像存储。在这个“视频监控系统VC源码”中,我们可以深入理解如何在传统的开发环境中,如...

    基于MFC的网络流量监测系统

    在本项目“基于MFC的网络流量监测系统”中,MFC被用作开发框架,来实现对网络流量的实时监控和分析。 网络流量监测是网络安全和管理的重要组成部分,通过收集和分析网络中的数据包信息,可以洞察网络性能、识别异常...

    精选_基于WinPcap和MFC实现的网络嗅探器_源码打包

    在实现网络嗅探器时,MFC可以提供图形用户界面(GUI)的构建框架,以及事件处理机制,使得程序更加易用和模块化。 三、网络嗅探器的基本结构 一个基于WinPcap和MFC的网络嗅探器通常由以下几个核心部分组成: 1. ...

    livevideo-DirectShow

    在实际应用中,开发者还可以通过自定义过滤器来扩展DirectShow的功能,例如添加特殊效果、实现网络流媒体播放等。这种灵活性使得DirectShow不仅适用于桌面应用程序,也常被用于嵌入式系统和移动设备的多媒体处理。 ...

    C#网络电视

    其次,C#中的流媒体技术是实现网络电视的关键。流媒体允许实时传输音频和视频数据,而无需等待整个文件下载完成。在C#中,System.IO命名空间提供了对流的支持,如FileStream、MemoryStream等,这些类可以帮助开发者...

Global site tag (gtag.js) - Google Analytics