littlebot
Published on 2025-04-11 / 2 Visits
0

【源码】基于C语言的QUIC流媒体播放系统

项目简介

本项目借助C语言实现了一个QUIC流媒体播放系统。通过集成bequic库,达成了基于QUIC协议的视频播放功能。QUIC协议具备低延迟、高可靠性、多路复用等特性,已成为下一代HTTP标准。此项目旨在为流媒体播放系统提供基于QUIC协议的传输方式,提升流媒体传输的效率与稳定性。

项目的主要特性和功能

  1. QUIC协议支持:集成bequic库,支持通过QUIC协议进行流媒体播放。
  2. 流媒体解码:利用FFmpeg库实现流媒体解码,支持多种音视频格式。
  3. 网络适应性:借助QUIC协议,提高流媒体传输效率和稳定性,适用于各种网络环境。
  4. 跨平台支持:支持Windows、Linux、Android、iOS等多个平台。
  5. 测试框架:提供简单测试框架,用于验证系统功能和性能。

安装使用步骤

1. 环境准备

根据目标平台,安装相应的编译环境和依赖库: - Windows:Windows 10,安装MSYS2 + MINGW最新版及GCC等工具,Chromium最新版(版本号4c428bdc69a2c16fdb0c5576e4098373bd6cc4e3),FFMpeg 4.1。 - Android:Ubuntu 16.04,NDK r17c,Chromium最新版(版本号e57cf4b40708a719439ad3895279b7de1feb62a8),FFMpeg 4.1.quic。 - Linux:Ubuntu 16.04,clang 3.8.0 - 2ubuntu4,Chromium最新版(版本号ec12ef7159674fc37fd340f12aeb81fccfb547a6),FFMpeg 4.1.quic。 - iOS:mac 10.14,clang x86_64 - apple - darwin18.0.0,Chromium最新版(版本号eca01417caf1e26ce41c88f2804291ddee75f5ed),xcode 10.1。

2. 源码获取

假设用户已经下载了本项目的源码文件。

3. 编译bequic库

根据目标平台进行编译: - Windows: - 下载chromium源码:在quic目录下,按chromium官方编译文档下载。 - 打bequic补丁:使用MSYS2进入BeQuic/patch目录下,执行./patch.sh。 - 生成工程:在chromium/src下执行gn gen out/Debug--args="is_debug=true is_component_build=false target_cpu=\"x86\""。 - 编译bequic库:在chromium/src下执行ninja -C out\Debug libbequic。 - 编译quic_server(用于测试):在chromium/src下执行ninja -C out\Debug quic_server。 - Android: - 下载chromium源码:在quic目录下,按chromium官方编译文档下载。 - 打bequic补丁:进入BeQuic/patch目录下,执行mv BUILD.gn BUILD.gn.bak; mv BUILD.gn.Android BUILD.gn; ./patch.sh; mv BUILD.gn BUILD.gn.Android; mv BUILD.gn.bak BUILD.gn。 - 生成工程:在chromium/src下执行gn gen out/Release --args="is_debug=false is_component_build=false target_os=\"android\" target_cpu=\"arm\""。 - 编译bequic库:在chromium/src下执行ninja -C out/Release libbequic。 - Linux: - 下载chromium源码:在quic目录下,按chromium官方编译文档下载。 - 打bequic补丁:进入BeQuic/patch目录下,执行./patch.sh。 - 生成工程:在chromium/src下执行gn gen out/linux_release_x64_notcmalloc --args="is_debug=false is_component_build=false target_os=\"linux\" target_cpu=\"x64\" use_allocator=\"none\""。 - 编译bequic库:在chromium/src下执行ninja -C out/linux_release_x64_notcmalloc libbequic。 - iOS: - 下载chromium源码:在quic目录下,按chromium官方编译文档下载。 - 打bequic补丁:进入BeQuic/patch目录下,执行mv BUILD.gn BUILD.gn.bak; mv BUILD.gn.ios BUILD.gn; ./patch.sh; mv BUILD.gn BUILD.gn.ios; mv BUILD.gn.bak BUILD.gn。 - 生成工程:在chromium/src下执行gn gen out/ios_arm64_shared --args="is_debug=false is_component_build=false target_os=\"ios\" target_cpu=\"arm64\" ios_code_signing_identity=\"DB1A2124EA21DA7F2BECD69186C8DCFB4A1B7CC7\"" --ide=xcode。 - 编译bequic库:在chromium/src下执行ninja -C out/ios_arm64_shared libbequic,并修改动态库查找路径install_name_tool -id @rpath/libbequic.dylib libbequic.dylib

4. 编译FFmpeg

  • Windows
  • 安装依赖:参考相关网页安装GCC、SDL2等依赖工具。
  • 处理bequic库的符号:将BeQuic/script/gen_a.sh拷贝到chromium/src/out/Debug目录下,执行./gen_a.sh
  • configure:在FFmpeg目录下,执行mkdir build; cd build; ../configure --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl --enable-debug=3 --disable-optimizations --disable-mmx --disable-stripping --arch=x86 --enable-libbequic --extra-cflags=-I/d/work/google/chromium/src/net/tools/quic --extra-ldflags=-L/d/work/google/chromium/src/out/Debug --extra-libs=-lbequic(注意修改路径)。
  • 编译:在FFmpeg/build目录下,执行make && make install,并把chromium/src/out/Debug/libbequic.dll拷贝到ffplay运行目录。
  • Android
  • 编译:在FFmpeg/build目录下,执行./build_android.sh(需指定相关路径)。
  • Android端简单测试:用Android Studio(3.4)打开BeQuic/test/android目录下的TestFFmpegQuic工程,将编译产生的所有.so库拷贝到BeQuic/test/android/TestFFmpegQuic/FFmpegQuic/src/main/jni/FFmpeg/lib/armeabi - v7a目录下,连接Android手机,编译、运行。
  • Linux
  • configure:在FFmpeg下创建build目录,并进入FFmpeg/build目录,执行../configure --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl --enable-debug=3 --disable-optimizations --disable-mmx --disable-stripping --arch=x64 --enable-libbequic --extra-cflags="-I../../quic/chromium/src/net/tools/quic -fPIC" --extra-ldflags="-L../../quic/chromium/src/out/linux_release_x64 -fPIC" --extra-libs=-lbequic --prefix=../linux(注意修改路径)。
  • 编译:在FFmpeg/build目录下,执行make && make install
  • 测试:将libbequic.so拷贝到FFmpeg/build/lib下,执行export LD_LIBRARY_PATH=<filepath>/ffmpeg/build/lib,然后在FFmpeg/build执行./ffplay quic://www.example.org:6121 -timeout 1000 -verify_certificate 1
  • iOS:使用xcode打开Bequic/test/ios/quic_shared_test/quic_test.xcodeproj,编译后测试。

5. 运行测试

在Google的Playing With QUIC页面有测试的详细介绍,这里以Windows端为例: - 准备测试文件: - 准备文件源:准备一个HTTP服务(如nginx),在其html根目录放置1.mp4文件。 - 修改hosts:在本机(Windows10)修改hosts,192.168.116.133 www.example.org。 - 下载文件源并保留HTTP头:在MSYS2下,执行mkdir /tmp/quic-data; cd /tmp/quic-data; wget -p --save-headers http://www.example.org/1.mp4。 - 修改HTTP头:使用编辑器修改/tmp/quic-data/www.example.org/1.mp4的HTTP头,删除"Transfer - Encoding: chunked"和"Alternate - Protocol"头,增加"X - Original - Url: https://www.example.org/"头。 - 修改hosts:在本机(Windows10)修改hosts,127.0.0.1 www.example.org。 - 生成并安装证书: - 生成证书:进入chromium/src/net/tools/quic/certs目录,执行./generate-certs.sh。 - 安装证书:进入chromium/src/net/tools/quic/certs/out目录,执行certutil -addstore -f "ROOT" 2048 - sha256 - root.pem。 - 启动quic - server:在chromium/src目录下,执行./out/Debug/quic_server --quic_response_cache_dir=/tmp/quic-data/www.example.org --certificate_file=net/tools/quic/certs/out/leaf_cert.pem --key_file=net/tools/quic/certs/out/leaf_cert.pkcs8。 - 启动ffplay:在FFmpeg/build目录下,执行./ffplay quic://www.example.org:6121 -timeout 1000 -verify_certificate 1(若设置-verify_certificate 0,可省略证书生成和安装环节)。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】