Real time H.264 Encoding and Decoding-Using FFmpeg and x264

本文档概述了使用开源项目FFmpeg和x264进行H.264实时编码、传输和解码的第一阶段开发工作。详细介绍了如何通过FFmpeg调用x264库实现视频帧的编码,并通过UDP协议传输到接收端进行实时解码。

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

Introduction 

Thisdocumentation serves as a quick overview on the first development phaseof our wireless video compression and transmission testbed, i.e. H.264realtime encoding, transmission, and decoding using two open sourceprojects FFmpeg and x264.

FFmpeg is a comprehensive multimediaencoding and decoding library that consists of numerous audio, video,and container formats. For H.264 video encoding, FFmpeg uses externalopen source library x264. In our testbed, FFmpeg works as an encodingand decoding front-end, while x264 is the encoding engine. At theencoder side, frames are captured by camera and then encoded into H.264bitstream in real time. Encoded packets are transmitted over UDPpackets to the receiver. At the receiver side, packets are received,decoded, and displayed in real time too. We have also pruned FFmpegsuch that source codes of unrelated codecs and formats have beenremoved from the package. It will make our future development easier.

Infollowing sections, we will give brief introduction on FFmpeg and x264,as well as necessary external libraries in Section 2. We will alsointroduce how to use our software to perform real time H.264 encoding,transmission, and decoding in Section 3. This documentation is notintended to be comprehensive. Instead, hopefully it will provide enoughinformation to interested readers to quickly set up and try out thesoftware, or even to do their own development.

 

Source Packages and Libraries 

x264 

x264 is a free library for encoding H264/AVC video streams. It is used by many other projects. Below is its official website.
    Website: http://www.videolan.org/developers/x264.html
    Download: git clone git://git.videolan.org/x264.git

Followingcommands are used to build debug and release version of x264. Aftersuccessful configurations, use “make” and “make install” to compile andinstall x264. 

    debug version: ./configure --disable-asm --enable-debug --enable-pic
                            --enable-shared --disable-mp4-output
    release version: ./configure --enable-pic --enable-shared
                            --disable-mp4-output

FFmpeg 

FFmpegis a complete open source solution to record, convert and stream audioand video. It includes libavcodec, the leading audio/video codeclibrary used by several other projects. It also includes libavformat,an audio/video container mux and demux library. FFmpeg is developedunder Linux, but it can compiled under most operating systems,including Windows. For detailed
information and downloading, please visit following website.
    Website: http://ffmpeg.mplayerhq.hu/
    Download: git clone git://git.mplayerhq.hu/ffmpeg/
    cd ffmpeg
    git clone git://git.mplayerhq.hu/libswscale/

Following commands are used to build debug and release version of FFmpeg. Note that we must
configureFFmpeg to use x264 library. After successful configurations, use “make”and “make install” to compile and install FFmpeg.

    debug version: ./configure --enable-gpl --enable-libx264 --enable-swscale
                           --enable-debug --disable-optimizations --disable-stripping
    release version: ./configure --enable-gpl --enable-libx264 --enable-swscale 

Git
Git is an open source version control system designed to handle very large projects with speed
and efficiency, but just as well suited for small personal repositories. We need Git to download
FFmpeg and x264 source codes.
    Website: http://git.or.cz/
    Download: http://www.kernel.org/pub/software/scm/git/

Subversion (SVN)
Subversion is an open source version control system. It is used to maintain current and historical
versions of files such as source code, web pages, and documentation. Subversion is well-known in
the open source community and is used on many open source projects and we need Subversion to down Yasm and SDL.
    Website: http://subversion.tigris.org/
    Download: http://subversion.tigris.org/getting.html#source-release

Yasm
Yasmis a complete rewrite of the NASM assembler under the “new” BSD License(some portions are under other licenses, see COPYING for details). BothFFmpeg and x264 uses Yasm.
    Website: http://www.tortall.net/projects/yasm/
    Download: svn co http://www.tortall.net/svn/yasm/trunk/yasm yasm

Simple DirectMedia Layer (SDL)
SimpleDirectMedia Layer is a cross-platform multimedia library designed toprovide low level access to audio, keyboard, mouse, joystick, 3Dhardware via OpenGL, and 2D video framebuffer. It is used by MPEGplayback software, emulators, and many popular games and FFmpeg usesSDL for displaying decoded video contents.
    Website: http://www.libsdl.org/
    Download: svn checkout http://svn.libsdl.org/branches/SDL-1.2

 

To Use FFmpeg and FFplay

Encoding 

Encoding is done by binary ffmpeg in our trimmed FFmpeg package.It calls x264 library to encode frames captured by camera into H.264bitstreams. We have modified ffmpeg such that encoded bitstreams aresent to receiver over UDP packets, or saved locally, or both. A commoncommand line input is shown below. In this example, the input of theencoder is camera captured frames with CIF resolution. Frame rate is10fps. The output is H.264 bitstream with bitrate at 50kbps. Intraframe interval is set to 100. The encodeded bitstream is both sent tolocalhost with port number 12349, and saved as a local file out.264 in/bs directory.
    ./ffmpeg -g 100 -f video4linux -b 50k -s cif -r 10 -i /dev/video0
                  -vcodec libx264 -y -dest_ip 127.0.0.1 -dest_port 12349 -f h264../bs/out.264
The command below only sends encoded bitstream over UDP packets:
    ./ffmpeg -g 100 -f video4linux -b 50k -s cif -r 10 -i /dev/video0
-vcodec libx264 -y -dest_ip 127.0.0.1 -dest_port 12349 -f h264
The command below only saves encoded bitstream to a local file:
    ./ffmpeg -g 100 -f video4linux -b 50k -s cif -r 10 -i /dev/video0
                  -vcodec libx264 -y -f h264 ../bs/out.264
In Table 1 we list some frequently used options of ffmpeg.

Decoding
Decoding is done by binary ffplay in our trimmed FFmpeg package.It decodes H.264 bitstream and displays in real time. We have modifiedffplay such that it can both decodes local H.264 file and UDP packetscontaining H.264 bitstream, but not simultaneously. The command belowdecodes H.264 bitstream in UDP packets assuming port number 12349 isused. Combined with the first ffmpeg command line example, real timeH.264 encoding and decoding will be performed on the same PC.

    ./ffplay -dest_port 12349 -f h264
The command below decodes local H.264 bitstream assuming the out.264 file is located in /bs directory.
    ./ffplay ../bs/out.264
Below we list some frequently used options and hot keys of ffplay.

Options: 

  • -h: show help
  • -f: force format
  • -s: set frame size (WxH or abbreviation)
  • -dest_port: specify destination port number
  • -fs: force full screen
  • -x: force displayed width
  • -y: force displayed height

Hot keys:

  • q/ESC: quit
  • f: toggle full screen
  • p/SPC: pause
1. 用户与身体信息管理模块 用户信息管理: 注册登录:支持手机号 / 邮箱注册,密码加密存储,提供第三方快捷登录(模拟) 个人资料:记录基本信息(姓名、年龄、性别、身高、体重、职业) 健康目标:用户设置目标(如 “减重 5kg”“增肌”“维持健康”)及期望周期 身体状态跟踪: 体重记录:定期录入体重数据,生成体重变化曲线(折线图) 身体指标:记录 BMI(自动计算)、体脂率(可选)、基础代谢率(根据身高体重估算) 健康状况:用户可填写特殊情况(如糖尿病、过敏食物、素食偏好),系统据此调整推荐 2. 膳食记录与食物数据库模块 食物数据库: 基础信息:包含常见食物(如米饭、鸡蛋、牛肉)的名称、类别(主食 / 肉类 / 蔬菜等)、每份重量 营养成分:记录每 100g 食物的热量(kcal)、蛋白质、脂肪、碳水化合物、维生素、矿物质含量 数据库维护:管理员可添加新食物、更新营养数据,支持按名称 / 类别检索 膳食记录功能: 快速记录:用户选择食物、输入食用量(克 / 份),系统自动计算摄入的营养成分 餐次分类:按早餐 / 午餐 / 晚餐 / 加餐分类记录,支持上传餐食照片(可选) 批量操作:提供常见套餐模板(如 “三明治 + 牛奶”),一键添加到记录 历史记录:按日期查看过往膳食记录,支持编辑 / 删除错误记录 3. 营养分析模块 每日营养摄入分析: 核心指标计算:统计当日摄入的总热量、蛋白质 / 脂肪 / 碳水化合物占比(按每日推荐量对比) 微量营养素分析:检查维生素(如维生素 C、钙、铁)的摄入是否达标 平衡评估:生成 “营养平衡度” 评分(0-100 分),指出摄入过剩或不足的营养素 趋势分析: 周 / 月营养趋势:用折线图展示近 7 天 / 30 天的热量、三大营养素摄入变化 对比分析:将实际摄入与推荐量对比(如 “蛋白质摄入仅达到推荐量的 70%”) 目标达成率:针对健
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值