首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

基於 Live555 實現網絡直播系統(含完整代碼)

     編輯:關於C語言

專案背景與架構

Live555 是業界廣泛使用的開源 RTSP/RTP 媒體流庫,由四大核心靜態庫組成:libUsageEnvironment、libliveMedia、libgroupsock、libBasicUsageEnvironment。本文展示如何在 VC++2010 中整合這些庫,構建一個基於 RTP 多播的 MPEG-TS 直播推流端,配合 VLC、FFplay 等播放器驗證。

核心代碼結構解析

1. 環境初始化與多播組播配置

TaskScheduler* scheduler = BasicTaskScheduler::createNew();
env = BasicUsageEnvironment::createNew(*scheduler);

// 多播地址與端口(SSM/ASM 可切換)
char const* destinationAddressStr = "239.255.42.42"; // ASM 多播組
const unsigned short rtpPortNum = 1234;
const unsigned short rtcpPortNum = rtpPortNum + 1;
const unsigned char ttl = 7; // 穿越 7 層路由

struct in_addr destinationAddress;
destinationAddress.s_addr = our_inet_addr(destinationAddressStr);
Groupsock rtpGroupsock(*env, destinationAddress, Port(rtpPortNum), ttl);
Groupsock rtcpGroupsock(*env, destinationAddress, Port(rtcpPortNum), ttl);

2. 創建 RTPSink 與 RTCP 實例

// Payload Type 33 為 MPEG2-TS,時鐘頻率 90000 Hz
videoSink = SimpleRTPSink::createNew(*env, &rtpGroupsock,
    33, 90000, "video", "mp2t", 1, True, False);

// RTCP 實例:用於 QoS 監控與同步
RTCPInstance::createNew(*env, &rtcpGroupsock,
    5000, // 預估帶寬 kbps
    CNAME, videoSink, NULL, isSSM);

3. 可選:內建 RTSP 服務器

通過定義 IMPLEMENT_RTSP_SERVER 宏可啟用內嵌 RTSP Server,允許客戶端通過 rtsp://ip:port/testStream 拉流,而非僅限 RTP 多播。

4. 媒體源讀取與推流循環

void play() {
    // 以 TS 包大小 (188 bytes) * 7 為讀取塊大小
    ByteStreamFileSource* fileSource = ByteStreamFileSource::createNew(*env, "test.ts", 1316);
    videoSource = MPEG2TransportStreamFramer::createNew(*env, fileSource);
    
    // 開始推流,播放結束回調 afterPlaying 實現循環播放
    videoSink->startPlaying(*videoSource, afterPlaying, videoSink);
}

編譯與運行要點

  • 需將 4 個 .lib 及對應頭文件加入 VC++ 項目(Include/Library 目錄配置)
  • 輸入文件 test.ts 必須為標準 MPEG-TS 格式(含 PAT/PMT/PCR 等表)
  • 運行後,使用 VLC 打開 rtp://239.255.42.42:1234 即可觀看
  • 防火牆需放行 UDP 1234/1235 端口及 IGMP 協議

擴展方向

  • 替換 MPEG2TransportStreamFramer 為 H264VideoStreamFramer 支持 H.264 ES 推流
  • 集成 RTSPServer 實現點播、暫停、拖拽等交互控制
  • 添加多路流同步推送(音視頻分離 Track)

本文轉載自 “leixiaohua1020視音頻技術” 博客,原文地址:https://leixiaohua1020.blog.51cto.com/3974648/1303876

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved