开源的流媒体视频和音频RTSP开发框架live555(http://www.live555.com/)对于学习和构建音视频流媒体或者直播服务是很方便的。官方的源码包对各平台编译单独列出了对应的makefile,但是为了构建项目方便,这里对live555的构建编译增加了cmake支持,并整理了一个demo展示如何创建个人的上手项目,搭建一个简单的RTSP流媒体服务。
项目结构
live555_starter
- live
- openssl
- src
|- stream_server.h
|- stream_server.cpp
|- main.cpp
- CMakeLists.txt
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(live555_starter)
if (WIN32)
add_definitions(
-D_CRT_SECURE_NO_WARNINGS
-D_WINSOCK_DEPRECATED_NO_WARNINGS
-DNO_GETIFADDRS
)
else()
add_definitions(
-DSOCKLEN_T=socklen_t
-D_LARGEFILE_SOURCE=1
-D_FILE_OFFSET_BITS=64
)
endif()
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/openssl-1.1.1g/include
${CMAKE_CURRENT_SOURCE_DIR}/live/BasicUsageEnvironment/include
${CMAKE_CURRENT_SOURCE_DIR}/live/groupsock/include
${CMAKE_CURRENT_SOURCE_DIR}/live/UsageEnvironment/include
${CMAKE_CURRENT_SOURCE_DIR}/live/liveMedia/include
)
if (WIN32)
link_directories(
${CMAKE_CURRENT_SOURCE_DIR}/openssl-1.1.1g/prebuild/win
)
else()
link_directories(
${CMAKE_CURRENT_SOURCE_DIR}/openssl-1.1.1g/prebuild/linux
)
endif()
file(GLOB LIVE555_SRC
live/BasicUsageEnvironment/*.cpp
live/groupsock/*.cpp
live/groupsock/*.c
live/UsageEnvironment/*.cpp
live/liveMedia/*.hh
live/liveMedia/*.cpp
live/liveMedia/*.c
)
file(GLOB STREAM_SERVER_DEMO_SRC
${LIVE555_SRC}
src/*.h
src/*.cpp
)
add_executable(stream_server_demo
${STREAM_SERVER_DEMO_SRC}
)
if (WIN32)
target_link_libraries(stream_server_demo
ws2_32
libssl
libcrypto
)
else()
target_link_libraries(stream_server_demo
ssl
crypto
)
endif()
说明
- live依赖库所有源码都参与编译
- ssl和crypto的依赖使用项目内置的openssl库,无其他系统级依赖
- 支持windows和linux以及mac
- 只实现了rtsp的流媒体服务,不包含hls转发
使用
构建和编译项目后,在程序执行目录放置视频或者音频文件,可以使用子文件夹相对路径
例如,执行目录文件结构:
build
- stream_server_demo
- video
|- v1.mkv
然后运行stream_server_demo,启动后打印如下信息:
LIVE555 Media Server
version 1.10 (LIVE555 Streaming Media library version 2022.01.11).
Play streams from this server using the URL
rtsp://168.61.73.255:8554/<filename>
where <filename> is a file present in the current directory.
Each file's type is inferred from its name suffix:
".264" => a H.264 Video Elementary Stream file
".265" => a H.265 Video Elementary Stream file
".aac" => an AAC Audio (ADTS format) file
".ac3" => an AC-3 Audio file
".amr" => an AMR Audio file
".dv" => a DV Video file
".m4e" => a MPEG-4 Video Elementary Stream file
".mkv" => a Matroska audio+video+(optional)subtitles file
".mp3" => a MPEG-1 or 2 Audio file
".mpg" => a MPEG-1 or 2 Program Stream (audio+video) file
".ogg" or ".ogv" or ".opus" => an Ogg audio and/or video file
".ts" => a MPEG Transport Stream file
(a ".tsx" index file - if present - provides server 'trick play' support)
".vob" => a VOB (MPEG-2 video with AC-3 audio) file
".wav" => a WAV Audio file
".webm" => a WebM audio(Vorbis)+video(VP8) file
See http://www.live555.com/mediaServer/ for additional documentation.
然后打开支持rtsp协议的流媒体客户端,比如vlc播放器,选择播放网络流,然后填入url即可播放
源码
https://github.com/tashaxing/live555_starter