基于H.264的实时桌面录像设计

 

本来想到南海研究站做DSP相关的工作,不过做视频编解码相关工作也很有意思。

1、功能说明
本软件实现了点对点的实时桌面录像传输,接收端采用VLCFFMPEG可以实时播放发送的桌面录像,达到了每秒15帧的刷新率。采用不失真方式压缩桌面大小,编码成264码流,进一步利用tsmux264码流文件转换成ts流,当ts缓冲区大于188字节后自动调用UDP点对点发送出去。

2、设计流程
本软件的最终成品是一个不断发送ts码流的软件,ts码流是视频流的包装,因此本软件最要是得到一个视频流,我们采用X264来编码产生H.264视频流。 X264的工程源码主要分四个层次,而底下三个层次(帧层、条带层、宏块层)已经封装在libx264d.lib里面,一般情况下是不需要对lib工程进行修改。 X264的最上一层,主函数层,主函数层提供给用户一个接口,输入视频图像原始的YUV数据,即可输出编码好的264码流数据。根据主函数的提供的接口,我们首先需要将屏幕截取下来然后缩小到我们期望的大小(图像越大编码时间越长,帧率将会越小),截屏区域以及压缩后的大小通过宏定义实现便捷修改,本程序中,我采用了CImage类创建图像,然后从屏幕得到图像并用不失真的方式得到期望的缩小的图像,进而得到图像的RGB值,再通过优化的YUV计算公式(将复杂乘除改成了简单乘除及移位)得到一帧图像的YUV数据,然后将数据YUV数据赋值给X264编码的PIC变量,再调用encode_frame()完成一帧编码并得到264码流文件。然后调用tsmux264码流文件打包成ts流数据丢进发送缓冲区,tsmux自动将数据188字节一次一次通过UDP发送出去。 程序流程图如下: 本程序将以上流程图做成了死循环,不断截取屏幕丢给TSmux打包。需要注意的是,从获取屏幕数据到完成ts打包后,计算出所花时间T1,然后根据宏定义的X264参数fps帧率,计算出两次获取屏幕的时间间隔为T0=1000/fps毫秒,然后再休眠(T0-T1)毫秒即可保证屏幕录像的原始数据与264码流数据的帧率一致。

H.264编码软件流程图

 

3、使用说明
使用本程序需要一台windowsXP或更新操作系统的计算机以及VLC播放器,本程序的UDP发送设置为发送到本地的10888端口(127.0.0.1:10888),可根据实际需要修改UDP.cpp里面的相关参数。 首先我们打开VLC.exe,点击“媒体”=》“打开网络串流”,如下图 在输入框内输入网络URLVLC需要播放的是发送到本计算机的某个端口的UDP数据,所以地址写成“udp://@:10888”,然后点击播放,如果发送ts流程序已经工作,则可能需要等待一分钟捕捉到ts流包头以及时间戳信息。如果打开vlc后才立马打开发送ts流程序,则可以立即播放发送过来的实时屏幕录像。 如果不是发送给本地,需要将程序中UDP.cppUDP参数进行修改,然后重新编译生成X264_TS.exe,然后直接双击运行X264_TS.exe即可实现本地屏幕录像实时发送出去。

源码下载地址:https://www.fujiangyun.com/Cloud_X264_TS.zip

《 “基于H.264的实时桌面录像设计” 》 有 20 条评论

  1. _ctj 的头像
    _ctj

    你好,源码下载不了,能发一份到邮箱吗:

    50*******@qq.com











    1. cloud 的头像

      您好,新的下载地址:http://www.fujiangyun.com/Cloud_X264_TS.zip

  2. hlb310 的头像
    hlb310

    我需要将输入的RTMP标准格式的时频流数据采用H.264进行压缩处理后进行输出,输入的视频流格式如下:
    分辨率:768*576
    格式:8比特灰度
    帧频:12.5帧/秒
    软件环境为C#
    想参考一下贵程序,源码过期了,可否续期一下,谢谢

  3. hlj 的头像
    hlj

    楼主,代码有过期了,求续期啊

  4. 小苹果 的头像

    楼主您好,源码又过期了,是否方便续期?

  5. donc 的头像
    donc

    楼主,源代码过期了,能不能重新分享一下,谢谢

  6. Sol 的头像
    Sol

    楼主您好,源码又过期了,是否方便续期?非常感谢!

  7. zjx 的头像
    zjx

    源码过期了,可以直接给我传一份吗?谢谢了

    1. cloud 的头像

      已经续期,谢谢关注。

  8. kenny 的头像
    kenny

    源码不能下载呀,重新分享下吧,谢谢!

    1. admin 的头像
      admin

      好的,请稍等。

  9. turkeyzhu 的头像

    windwows 简单的都是浮云,x264的都是使用库的了,目前是硬写的encode,用代码的D1无线传输的,我现在刚开始。–turkeyzhu

    1. admin 的头像
      admin

      欢迎交流。

    1. 留芳付氏 的头像

      谢谢哈,链接已添加

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注