直播(Live Streaming)和点播(Video on Demand, VOD)概念(RTMP、RTSP、HLS、DASH、HPD)

直播与点播

一、概念

1.1 直播(Live Streaming)

直播是一种多媒体流技术,可以实时传送音频和视频数据。在这个过程中,观众无需等待整个文件下载完毕就能开始观看或听取内容。

1.2 点播(Video on Demand, VOD)

点播是一种数字化媒体流的分发方式,用户可以随时选择并观看他们喜欢的视频内容。这种方式不同于实时广播,用户可以控制播放,暂停,停止,快进和倒带视频。

二、技术对比

2.1 数据传输方式

  • 直播:在直播中,最重要的是保证音视频数据能够实时、快速地传输到每一个观众手中。为了实现这一目标,直播通常会使用如RTMP、HLS、DASH或者RTSP等流媒体协议进行数据传输。这些协议都具备低延迟的特性,并且可以适应各种网络环境,以保证直播内容能够实时播放。另外,尽管HLS和DASH是基于HTTP的协议,但在直播场景下,它们通常会采用更小的分段时间以降低延迟。

  • 点播:与直播不同,点播的主要目标是提供高质量的音视频体验,以及丰富的用户交互性能(例如,暂停、快进、倒退等)。因此,点播更多地会采用如HTTP Progressive Download (HPD)、HLS、DASH等基于HTTP的传输协议。这些协议可以确保音视频数据的完整性,并且支持自适应比特率(ABR)技术,可以根据网络条件的变化动态调整视频质量,从而提供更好的用户体验。

2.2 互动性

  • 直播:由于直播内容的实时性,观众可以实时参与到直播过程中,例如实时评论、投票等,增强了互动性。
  • 点播:点播服务主要提供录制好的视频内容,互动性相对较弱。

2.3 内容控制

  • 直播:观众不能控制直播内容的播放进度,只能观看当前正在播放的内容。
  • 点播:观众可以自由控制内容的播放、暂停、快进和倒带等。

三、实现技术

3.1 直播技术

3.1.1 RTMP协议

RTMP(Real Time Messaging Protocol)是Adobe公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。RTMP基于TCP,保证了数据的完整性,但由于TCP的重传机制,可能会导致延迟。

ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -f flv rtmp://<server-ip>/live/stream

上述命令使用ffmpeg将输入文件input.mp4编码并推送到RTMP服务器。

然后我们就能使用某些工具,如VLC来播放地址rtmp://<server-ip>/live/stream的视频流了。

注意:RTMP服务器需要单独搭建,具体搭建方法可搜索我其他博文。

3.1.2 HLS协议

HLS(HTTP Live Streaming)是苹果公司提出的基于HTTP的流媒体网络传输协议,它将流媒体切分为一系列小文件,然后通过HTTP协议进行传输。

ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -f hls -hls_time 4 -hls_playlist_type event stream.m3u8

上述命令使用ffmpeg将输入文件input.mp4编码并生成HLS流。

该命令将生成一个名为stream.m3u8的HLS(HTTP Live Streaming)播放列表文件,以及与其相关的一系列.ts文件(分段视频文件)。这些文件将存储在运行此ffmpeg命令的同一目录下。

可以通过访问服务器上此目录的相应URL来访问生成的stream.m3u8文件。具体的URL取决于服务器配置和文件存放的路径。例如,如果服务器根目录是/var/www/,并且在/var/www/videos/目录下运行了这个ffmpeg命令,那么stream.m3u8文件的URL可能就是http://yourserver.com/videos/stream.m3u8

请确保服务器已经配置好对.m3u8和.ts文件类型的支持,并且正确设置了MIME类型,否则客户端可能无法正确播放这些流。

3.2 点播技术

3.2.1 HTTP Progressive Download

HTTP Progressive Download (HPD)是一种基于HTTP的点播技术,用户可以在下载过程中开始观看视频。

# 将MP4文件放置在Web服务器的可访问目录下,然后通过URL进行访问即可。
http://<server-ip>/path/to/video.mp4
3.2.2 HLS/DASH

HLS和DASH不仅可以用于直播,也可以用于点播。与HPD相比,HLS和DASH支持自适应比特率(Adaptive Bitrate, ABR),能根据网络状况动态调整视频质量,提供更好的观看体验。

ffmpeg -i input.mp4 -codec:v libx264 -profile:v main -level 3.1 -bf 1 -b_strategy 0 -sc_threshold 0 -refs 3 -coder 1 -mbd 2 -trellis 1 -pix_fmt yuv420p -me_range 16 -qdiff 4 -coder 1 -flags +loop -cmp +chroma -partitions +parti8x8+parti4x4+partp8x8+partb8x8 -me_method hex -subq 6 -me_range 16 -keyint_min 25 -keyint_max 250 -g 250 -r 30 -filter:v scale=-1:720 -b:v 1000k -f dash output.mpd

上述命令使用ffmpeg将输入文件input.mp4编码并生成DASH流。

DASH流(Dynamic Adaptive Streaming over HTTP)和HLS类似,都是一种适应网络条件动态调整视频质量的流媒体技术。DASH流通常由一个MPD(Media Presentation
Description)文件和一系列分段的媒体文件组成。

播放DASH流的方式也有很多,以下是一些常见的方法:

  1. MPEG-DASH播放器:例如Dash.js,这是一个用JavaScript写的开源DASH客户端,可以在所有兼容MediaSource
    Extensions的浏览器中运行。

  2. VLC播放器:VLC也支持播放DASH流,和播放HLS流一样,你可以点击"Media" -> “Open Network Stream…”,然后输入MPD文件的URL或路径。

  3. 在线DASH播放器:有些在线播放器也支持DASH流,比如bitmovin的在线DASH播放器。你只需要将MPD文件的URL粘贴到网页上的相应位置,然后点击播放即可。

  4. 其他媒体播放软件或服务:许多现代的媒体播放软件或服务,如Plex、Jellyfin等,都支持DASH流。

请注意,同样的,播放DASH流也需要能够访问到MPD文件及其相关媒体文件的URL或路径,如果是在本地电脑上生成的DASH流,你可能需要运行一个HTTP服务器来提供访问。

四、技术挑战

4.1 直播延迟问题

直播的实时性要求低延迟,但网络环境、编码解码过程、传输协议等因素都可能导致延迟。例如,RTMP基于TCP,重传机制可能导致延迟增大;HLS通过HTTP传输小文件,每个文件的传输时间也会造成延迟。

4.2 点播内容分发效率

点播需要将大量的视频内容分发到全球各地的用户,如何保证高效的分发是一个挑战。CDN(Content Delivery Network)是一种常用的解决方案,它将内容缓存到离用户近的节点,以减少数据传输的距离和时间。

猜你喜欢

转载自blog.csdn.net/Dontla/article/details/135373749