XXXLIVE系统开发小纪

本文记录了开发XXXLIVE系统过程中遇到的大坑,特别是FFMPEG在音视频处理中的核心作用。从理解FFMPEG、像素格式、音频采样格式到解决PTS/DTS同步问题,作者详细阐述了开发过程中的关键技术和问题。最后提到了多线程设计和DX显示优化,以及系统的复杂性与收获。
摘要由CSDN通过智能技术生成

从0独自写完整个录制系统,连写带学,正则统计2000行,看来还是有一点代码量,记录一下遇到的坑。

大坑::FFMPEG

首先整个录制系统的核心就是音视频处理。目前市面上所有的音视频处理基本都用到了开源库FFMPEG。我们直接使用这个库入手看起来也是比较明智的。
FFMPEG的大多数知识都来源于已经去世的雷博士的博客http://blog.csdn.net/leixiaohua1020?viewmode=contents。不得不说,雷博在这个方向上为太多的人做了入门介绍、翻译的工作。万分感谢!
基本上所有的例程都是一个文件写到尾,一个函数括到头。但对于我们需要N(N>3)路1080P实时编码、录制、预览,还包括一些小的功能需求,例如旋转、缩放、水印。显然这样的代码不能满足要求。于是我找了一些开源代码,最终锁定现在最火的OBS开源串流工具,OBS中也附带了录制的功能,但不能完全满足我们的需求。OBS中也使用了FFMPEG作为编解码的工具,其中分离分解了FFMPEG的数据结构,方便多线程编码,这样的思想帮我实现了最终的功能。


从一开始了解音视频后,并没有直接去了解这些基础性的东西,而是直接对例程更改,实现了一些简单的功能。但最后发现要想完全实现这个系统,还是得对这些东西进行一些系统的了解。

视频像素格式
从原来的基础认知中,以为.MP4 | .MKV | .RMVB这些就是视频的格式。其实并不是,准确的来说,这些只是容器。用于存放一些不同通道的数据,例如视频、音频、字幕等等。而现在我理解的真正的视频是以一定规范存储的编码的流数据。例如H.264码流。对于视频原始码流,是以YUV或者RGB像素格式存放的原始的视频帧,但很无奈的是,这样的数据十分庞大,相当于每秒1920*1080*32(RGBA)*30(帧) = 1.9G字节的数据。这样庞大的数据是根本无法存储的。所以在此颜色之上,出现了根据一些压缩手段。这就是我们一般说的编码Encoder
对于从摄像头获取到的数据,我们先通过解码器将其解码为特定的原始码流,然后送入编码器进行编码,最后存储在文件中。在这里,我遇到了一些问题。
一开始并不能理解像素格式的含义还有跟编码器的关系。对于H.264编码器,他只接受特定的某几个像素格式,我们这里用了比较大众化的YUV420P,并非我所直观了解到的以RGB颜色通道存储的原始码流,这给我开始的想法带来了很多困扰。
YUV格式是原来用于兼容彩色和黑白电视机的通用像素格式,他把亮度信息Y和两个色差信号U\V分开储存。节省了带宽,而且对于黑白电视机来说,只需要播放Y分量,放弃掉U\V分量即可播放。对于YUV420P,每4个像素点的亮度信息共享一堆UV信息,这样也减少了数据量。

一开始理所当然的将解码后的原始码流直接送入编码器,发现并不能编码。就是这样像素格式的问题。理解以后,利用FFMPEG自带的转换接口即可实现完整编码。这是我在入坑后解决的第一个重大问题。

音频采样格式
在解决了这个问题后,随之而来的就是音频编码的问题。同样的,原始音频码流也有特定的采样格式。我大学中接触到的数电模电还有信号分析中的一些记忆片段帮助我迅速解决了这个问题。音频采样格式有

    AV_SAMPLE_FMT_U8,          ///< unsigned 8 bits
    AV_SAMPLE_FMT_S16,         
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
解压后,请运行http://www.xxxx.com/install/ 进行安装 Sorry,我知道是要免费提供的,可是我的CSDN老是不够用 此版本能够看到记录,某用户的记录,并删除记录。 一. WeLive介绍: ------------------ WeLive在线客服系统是一个程序小巧, 安装使用简单的网上在线客服系统, 主要特点: 1. 基于PHP + MySQL + Ajax技术的在线客服系统; 2. 用户安装在自己的服务器或虚拟主机, 安装一次可在任意网站或页面中调用; 3. 前台中英文双语, 根据用户浏览器的语言自动切换或由管理员设置指定; 4. 客服人员多窗口与不同的访客同时交流; 5. 客服人员分组管理, 无限制添加客服人员; 6. 新信息窗口闪动, 信息提示声音, 颜色, 表情符号等等。 ============================================================== 二. WeLive安装: ------------------ A. 系统要求: -------------- 1. Unix, Linux或Windows Web服务器, 要求支持Ajax. 2. PHP4.1或以上. 3. MySQL4.0或以上. B. 安装步骤: -------------- 1. 设置FTP上传工具的传送模式为"二进制", 否则上传的PHP程序可能会在运行时发生意想不到的错误. 如设置FlashFXP:选项 -> 参数设置 -> 打开对话框 -> 传送 -> 在传送模式中选择"二进制(图像)" 2. 解压程序包后, 使用FTP工具上传到网站服务器某一指定目录如: welive/ 3. linux或unix服务器需要更改以下文件夹或文件属性为可写: ./welive/cache/ 属性: 777 ./welive/config/ 属性: 777 ./welive/config/settings.php 属性: 777 4. 新建一个MySQL数据库或向虚拟主机服务商索取已存在的MySQL数据库的数据库名, 用户名, 用户密码信息。 5. 在浏览器中输入地址: http://www.xxxx.com/welive/install/, 系统提示安装. 安装完成后建议删除安装目录 ./welive/install/ C. 重新安装: ------------- 1. 重新安装需要删除./welive/config/config.php文件, 上传install文件夹, 然后按第B.5步安装. ============================================================== 三. WeLive使用: ------------------ WeLive系统使用非常简单, 登录闻泰论坛可查阅更多相关使用方面的文章. 1. 调用客服小面板(浮动): ------------------------- a. html文件中调用代码: [removed][removed] 在html文件中的<head></head>或<body></body>之间插入上面一行代码, 网页就能调用客服小面板. 注意: 上面的文件地址为绝对地址, 当然也可以使用相对地址, 但如果您不知道当前html文件和welive.php的相对关系, 那么使用绝对地址将更为简单方便. b. php文件中调用: 在任何php代码段添加下面一句: echo '[removed][removed]'; 或在php文件中的html代码段添加下面一句: [removed][removed] c. 在weenCompany企业网站系统中调用: 如果希望在weenCompany系统的任何页面中都显示客服小面板, 可打开weenCompany的index.php文件: 查找到这一句: [removed][removed]'; 在其后面添加并变为如下(注意语句结尾的标点符号): [removed][removed] [removed][removed]'; 如果希望仅在weenCompany系统的某个模板样式中显示客服小面板, 可打开这个模板样式文件: 在此样式文件的</head>之前添加下面一句: [removed][removed] d. 在其它编程语言(如ASP)编写的网页文件中均调用显示客服小面板, 参考以上说明或访问闻泰论坛提问. 2. 直接在页面中插入客服图片(固定): ------------------------------------ 在需要显示WeLive在线客服系统“客服图片”的页面<body></body>之间任意您需要的地方, 插入以下代码: [removed][removed] 注:a. 四个客服在线状态图片存放在images目录, 可以随意更换, 但不要改名; b. 客服在线状态图片无法显示QQ, MSN, Skype的在线状态; 3. 管理员及客服人员登录: ----------------------------- a. 管理员及客服人员的操作面板登录地址为: http://www.xxxx.com/welive/ b. 建议修改客服人员的登录名和密码: 系统默认安装后, 系统自带客服人员的登录密码都与管理员密码相同, 请自行修改, 删除或添加. c. 只有管服人员登录后,系统才可以提供在线服务.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值