TS OVER IP的多画面合成

本文分享了一个多画面合成项目的实践经验,介绍了如何将多个UDP传输的TS流解码、缩放并合成,最终实现电视墙效果的技术细节。项目涵盖UDP收发、TS封装的视频解码、YUV画面处理及H264编码等关键技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.cppblog.com/elva/archive/2013/05/31/200717.html


    许久没写博客了,似乎现在也很难静下心来去写东西,倒也不是心情浮躁,以前的写blog用来收集网上文章,记录自己的一些经验,后来假设了自己的文件服务器,用wiz做了笔记的server,收集什么东西用wiz就完成了,自己记录点经验也不在乎格式,也都没拿出来分享。这次辛辛苦苦做完一个项目,其中遇到一些问题,没有网络上的资料自己是很难解决的。因此整理点东西,与大家分享,也不能总受之与人吧。

    终于做完了多画面合成的项目,颇有心得,其间也遇到一些问题,没有网络上的资料自己是很难解决的,但也不是所有东西都能在网上找到办法,使用ffmpeg遇到太多问题,许多只能通过阅读源码解决。如今做完了,拿出来与众分享。
画面合成器是将多个承载于UDP的TS流(MPTS,SPTS)解码,将解码后图像缩放成小画面,再将各个源合并成2x2,3x3,4x4等方式,实现电视墙的效果。
项目的需求是这样的:
1.UDP输入UDP输出
2.提供源切换的接口,客户会再某个时刻换掉某个源
3.良好的异常处理,某个UDP源断流或恢复不影响现有节目。这不是客户的要求,但有过大型项目经验的人知道,这是一定要考虑的
从实现层面来讲,需要以下技术点:
1.UDP单播组播接收
2.TS封装的H264与MPEG2视频解码为YUV
3.YUV缩放
4.YUV画面拼接
5.合成后的YUV压缩为H264
6.压缩后的视频打包TS
7.打包后的TS通过UDP发送
8.发送时需要进行流控,保证VLC可正常播放。
这些技术点不算难,真正的难点在于统筹运作,N个源各自的解码后画面输出速度不同,虽然我们要求各源帧率相同。各解码线程画面输出虽整体相同,但肯定会忽高忽低。如果每个源都正常的话,我们可以等待每个源都有画面的时候才进行合成。但是我们需要考虑源断流与恢复,就不能一直等待某个源。其二,为了支持源切换,我们应该涉及好运作模式,实现无缝切换,但这些只是我特定 业务的需要,接下来只讲与ffmpeg相关技术。
先讲上面提到的8个技术点,UDP收发就不用说了,值得一提的是接收需要使用异步模式,这个在后面会提到。除了YUV画面拼接,其他都可以用ffmpeg sdk实现。因此主要讨论使用ffmpeg进行解码编码,这种技术文章其实很多,但他们一般只有简单的方案,对于这些比较常见的东西,我们也不做讨论,只讨论几个重点,而又缺乏资料的问题,主要有:
1.对解码及编码自定义io回掉。UDP接收及发送不通过ffmpeg实现。对于UDP源来说,ffmpeg对MPTS支持不好。对于输出UDP来说,ffmpeg没有流控

一款免费的流媒体直播软件,主要用于流媒体直播,视频直播,视频点播,视频录制等应用,与FMS、WOWZA、RED5一道,作为用户流媒体直播应用的可选方案。 1、支持Windows/Linux等多种操作系统; 2、采用开发的流媒体协议,而非私有协议,可以与主流系统对接,至少支持RTMP推流,RTMP拉流,RTSP拉流三种方式获取直播流,支持对获取的直播流再按照TS组播或者单播,RTMP,RTSP,HLS,TS OVER HTTP,FLV OVER HTTP等标准流媒体协议的方式进行对外直播转发; 3、支持录制,可定时录制或手动录制,能录制MP4或者FLV格式文件,录制时支持生成新文件或者追加文件两种方式,支持录制超过4G的文件; 4、单台服务器可支持1000个以上并发用户,直播延时小于2秒; 5、支持RTMP转发功能,能够把AMS上的直播流转发给其它AMS服务器或者第三方的RTMP服务器,例如RED5,FMS,WOWZA流媒体服务器; 6、 支持PC/手机/平板电脑等多终端访问,无论是windows,linux,或者andriod以及IOS系统访问收看直播时都无需下载插件,直接观看; 7、响应点播时间控制在100ms以内,支持暂停、拖动等特技操作; 8、支持文件直播,可把硬盘上存在的FLV文件编目后,按设定好的任务和顺序进行直播; 9、内置Web应用系统,无需复杂配置,可直接部署到用户服务器使用,也可以选配更复杂的媒资管理系统,完成类似优酷土豆的应用模式; 10、开放的系统架构,提供二次开发接口,可轻松的融入到用户已有的平台或网站平台中、或在此基础上进行二次开放等 ------------------------------------------------------------------------- 使用说明: 1、关于安装运行:软件解压到硬盘上后,执行AokuMServiceManager,即可完成AMS服务的安装,安装完成后,在Windows系统服务中会出现一个AokuMService服务; 2、关于端口:AMS默认的管理端口是9001,可通过浏览器登陆http://127.0.0.1:9001/main.html进行管理;AMS默认的RTMP端口是1935,默认的rtsp端口是5554,默认的flv over http端口是7000,默认的ts over http端口是8008,默认的hls端口也是9001; 3、关于推流:使用直播你需要有一个支持rtmp推流的编码器,建议用奥酷全接口高清编码器,当然你也可以通过FME进行软编码来实现; 4、关于接收直播:AMS正常启动并发布上直播流后,你可以在网络内的任一电脑上打开http://ip:9001,通过浏览器观看直播,若开启了hls功能,通过iphone或者ipad登陆http://ip:9001即可观看直播。 5、若开启了TS组播,请确认防火墙是否允许组播,另外您网络内的路由器是否支持组播,接收组播是需要用VLC播放器来完成; 6、接收flv over http也是通过VLC播放器或者支持类似协议的播放器来测试。 7、若使用中出现问题,你可以查看logs目录下的rtmpserver.log文件,里面有详细的错误日志描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值