【转载】Live555 + Darwin Streaming Server(DSS)视频直播方案
该方案的实现原理是,通过Live555的DarwinInjector Class,把本地采集的音频和视频流,注入到DSS服务器。客户端就可以直接访问DSS服务器(不是Live555所在的采集端)来访问实时流媒体数据。
这种方案的优点:
》保证了单台DSS服务器并发量可以上几百。
》DSS服务可以像承载点播一样,实现直播。
》支持多路直播,就跟增加一个点播文件一样简单。
缺点:
》延时一般需要5秒左右
》直播集群支持节点受限,一台PC运行Live555采集端可同时注入的DSS服务器数量不超过5台
首先需要修改DSS服务端配置:
这里需要设置一下/usr/local/movies/目录的QTSS访问权限,允许写入:
修改DSS配置,增加文件:vi /usr/local/movies/qtaccess,增加以下几行
require any-user
require any-user
基本原理图如下:
/----【客户端 1 RTSP Client(例如VLC)】
【采集客户端调用Live555 DarwinInjector】 ----> 【DSS 服务器 192.168.1.22】《-----【客户端 2 RTSP Client(例如VLC)】
----【客户端 N RTSP Client(例如VLC)】
方案的实现流程,用伪代码来说明:
-
调用live555中已有的类创建Darwin injector对象
DarwinInjector* injector = DarwinInjector::createNew(env, "teset.sdp"); -
采集的音频流,编码为AAC格式
-
把采集到的音频流,加入injector对象(含有rtp和rtcp)
//2.1. 得到音频流AAC的es流
FramedSource *audioSource = demuxSvr->NewElementaryStream(0, stream_id);
//2.2 创建音频流的rtp和rtcp
Groupsock rtpGroupsockAudio(env, dummyDestAddress, 0, 0);
Groupsock rtcpGroupsockAudio(env, dummyDestAddress, 0, 0);
audioSink = MPEG4GenericRTPSink::createNew(env, &rtpGroupsockAudio,
97,//audio rtp payload 97
stream->sample_rate,
"audio", "AAC-hbr", configstr,
stream->channels );
RTCPInstance audioRTCP = RTCPInstance::createNew(env, &rtcpGroupsockAudio,
estimatedSessionBandwidthAudio, CNAME,
audioSink, NULL / we're a server */);
//2.3 把音频流加入 'Darwin injector':
injector->addStream(audioSink, audioRTCP);
- 把采集到的视频流加入injecctor
//3.1. 得到视频流H.264编码的es流
FramedSource videoEs = demuxSvr->NewElementaryStream(0, stream_id);
H264VideoStreamFramer framer = H264VideoStreamFramer::createNew(env, videoEs);
const char *sps = demuxSvr->GetLastDemux()->GetSPSString();
//3.2 创建视频流的rtp和rtcp
Groupsock rtpGroupsockVideo(env, dummyDestAddress, 0, 0);
Groupsock rtcpGroupsockVideo(env, dummyDestAddress, 0, 0);
videoSink = H264VideoRTPSink::createNew(env, &rtpGroupsockVideo, 96, sps);
const unsigned estimatedSessionBandwidthVideo = 2500; // in kbps; for RTCP b/w share
RTCPInstance videoRTCP =
RTCPInstance::createNew(env, &rtcpGroupsockVideo,
estimatedSessionBandwidthVideo, CNAME,
videoSink, NULL / we're a server */);
//3.3把视频流加入 'Darwin injector':
injector->addStream(videoSink, videoRTCP);
- 开始把实时音视频流注入DSS服务器
//设置DSS服务器参数和节目名
if (!injector->setDestination("192.168.1.22", "test.sdp",
"test.sdp", "LIVE555 Streaming Media")))
{
env << "injector->setDestination() failed: "
env.reclaim();
return -1;
}
//启动音视频流
status.videoSink->startPlaying(videoSource, afterPlaying, (void)&status);
status.audioSink->startPlaying(audioSource, afterPlaying, (void)&status);
//启动Live555的任务循环
env.taskScheduler().doEventLoop(); // does not return
- 客户端访问DSS服务器节目,本例中的URL为:
rtsp://192.168.1.22/test.sdp
- 分享
- 举报
-
浏览量:907次2024-01-15 15:09:32
-
浏览量:884次2023-10-09 16:20:04
-
浏览量:759次2024-02-23 16:58:46
-
浏览量:3489次2018-04-26 15:06:40
-
浏览量:4394次2020-08-11 10:39:44
-
浏览量:2734次2020-07-29 15:54:29
-
浏览量:797次2023-12-11 11:37:59
-
浏览量:3675次2023-12-02 14:17:30
-
浏览量:3978次2020-04-26 17:55:16
-
浏览量:15817次2020-09-28 11:08:13
-
浏览量:1968次2020-04-03 10:15:29
-
浏览量:1612次2023-12-29 17:51:55
-
浏览量:9270次2022-06-08 14:09:35
-
浏览量:920次2024-01-02 17:24:57
-
浏览量:2713次2023-12-29 17:55:25
-
2020-06-09 11:00:13
-
浏览量:5631次2017-11-15 11:39:42
-
浏览量:986次2024-01-17 11:25:11
-
浏览量:4725次2023-03-24 22:56:50
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
david
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明