导航:首页 > 源码编译 > rtsp工程如何编译

rtsp工程如何编译

发布时间:2024-11-07 07:25:25

1. web端实现rtsp实时推流视频播放可行性方案

在web端实现rtsp实时推流视频播放,有多种可行性方案,包括RTMP、HLS、WebSocket、VLC插件、JSMpeg、WebRTC(webrtc-streamer)以及liveweb等。以下是几种方案的简要概述:

1. **RTMP方案**:需要ffmpeg处理rtsp到rtmp,通过nginx代理,但依赖flash支持,且Windows下编译复杂,且主流浏览器不支持flash。

2. **HLS方案**:通过切片转存为多个视频片段,web端用video.js播放,简单但延迟较高,适合点播。

3. **WebSocket**:原生支持,延迟低,但前端接收的是mp4格式,易于显示。

4. **VLC插件**:直接播放RTSP,无需中介,但需手动安装插件且对浏览器兼容性有限。

5. **WebRTC (webrtc-streamer)**:性能好、延迟低,但后端CPU占用高,且支持多路同屏数有限。

6. **liveweb**:支持多种流媒体格式,具备高可用性和灵活性,可实现H5无插件直播。

目前,WebRTC方案被认为是最好的,尤其阿里云等服务采用此方案。但需注意的是,WebRTC还有更多功能,如实时通话,未来可能有更多应用空间。

综上,选择哪种方案取决于项目需求、技术栈和兼容性要求,权衡延迟、稳定性、兼容性和资源消耗等因素。

2. live555移植到hi3516做rtsp服务器

live555库本身实现了做rtsp服务器,客户端可以通过rtsp客户端访问服务器上的文件并播放,支持的文件格式如下:

本次任务实现了把live555移植到嵌入式海思芯片hi3516上做rtsp服务器,除了支持客户端播放服务器上上面格式文件外,另添加了实时播放hi3516摄像头图像与音频的功能。

live555源码目录如下:

四个基本的库分别是:BasicUsageEnvironment, groupsock, liveMedia和UsageEnvironment。
编译后即生成这4个库文件:

这里我只简单说下liveMedia库的功能,其他三个库是live555运行的基础库,太(mei)简(yan)单(jiu),就不说了。

liveMedia库包含了音视频相关的所有功能,包含音视频文件的解析,RTP传输封装等,我们可以看到这个目录下有对h264、AAC等文件解析的支持:

交叉编译过程:略
这里我主要是修改mediaServer文件夹下的示例程序,添加实时预览摄像头图像与mic声音功能。
hi3516芯片,视频编码格式为h264,音频编码格式为AAC。

1.添加音频AAC支持
添加类 ADTSAudioLiveSource ,继承自FramedSource

在该类的doGetNextFrame函数里实现获取hi3516音频数据做为rtsp服务器音频源。
注意点:

1.1 adts默认是带7字节或者9字节的头,传给rtsp的时候是要去掉头的,实际上RTSP通过rtp传输AAC帧的时候是不带adts头的,而是带4个字节的mpeg4-generic头。

1.2 从FramedSource继承而来的变量

每次doGetNextFrame帧时,从FIFO里取一个完整的AAC帧,把帧拷贝到fTo buf里面,然后比较帧大小与fMaxSize来赋值几个关键的变量:

注意,不管帧长是否大于fMaxSize,每次都需要把完整的帧拷贝到fTo指针,live555内部会根据fNumTruncatedBytes等变量自行处理分包。

1.3 doGetNextFrame函数最后不管有没有取到帧,都需要执行FramedSource::afterGetting

1.4 采样率,通道数,configstr等的计算

这几个变量在mediaSubbsession建立RTPsink时要用到,它直接影响了SDP里对于AAC音频描述字段的产生

添加类 ,继承自

createNewStreamSource函数创建上面的ADTSAudioLiveSource做为音频输入源,参数estBitrate为预估的码率,海思AAC编码码率设置为24kbps,所以estBitrate设置为24.
createNewRTPSink有必要继承,因为需要根据音频源的采样率、通道数等创建RTPSink.

2.添加h264支持
添加 H264FramedLiveSource ,继承自FramedSource

unsigned maxFrameSize()函数必须继承,里面设置帧最大可能的大小,我设置为100000,如果不继承就是默认的,会出现画面马赛克
doGetNextFrame函数里面和AAC取帧的处理差不多,我加多了一个步骤,就是第一次取帧的时候会调用接口去产生一个关键帧,并且等待这个关键帧到来才处理,这样连接后出图会比较快。

添加类 ,继承自

这个类就是实现createNewStreamSource时创建H264FramedLiveSource

3.修改DynamicRTSPServer
修改类DynamicRTSPServer,在lookupServerMediaSession函数里动点手脚,默认在这个函数里面会根据文件名去寻找服务器下相应的文件做为直播源,我这里比较如果是我特定的live源名字则直接返回,相应的live源创建rtsp服务器的时候就添加好

4.初始化rtsp server
初始化rtsp服务器,添加一个ServerMediaSession,该mediaSession添加一个和一个,然后把该mediaSession添加给rtsp服务器。

客户端访问 rtsp://x.x.x.x/ch0.live 时就可以看到实时的摄像头图像与声音啦!

阅读全文

与rtsp工程如何编译相关的资料

热点内容
口头指派式命令 浏览:470
php开发工程师面试题 浏览:954
linux内核源码pdf 浏览:66
mc命令方块怎么提取 浏览:367
有关程序员的五大魔咒你中了几个 浏览:204
本地文件如何上传linux服务器 浏览:17
传奇资源网站源码 浏览:377
f26app怎么下载 浏览:120
程序员与酒 浏览:439
php政府网站源码 浏览:912
前端面试常问算法 浏览:153
pythonopen可以打开文件夹吗 浏览:635
不锈钢加密网带厂家 浏览:347
哪一年除夕不算法定节假日 浏览:40
程序员对键盘的需求 浏览:605
程序员的峥嵘岁月 浏览:58
python调用类里面的函数 浏览:473
pre加密头发医院 浏览:547
优先级高服务算法 浏览:840
抖音最火解压游戏名字 浏览:952