一.流媒体
之前利用 Nginx+FFmpeg 搭建了一个简单的本地流媒体服务器,可以实现简单的推流(RTMP)拉流(HLS).在学习直播技术的过程中,一些有关流媒体的基本概念还是很模糊,这里做下总结.
1.GOP
GOP(group of pictures)画面组,一个 GOP 就是一组连续的画面.一个影片由一个/多个序列组成;而一个序列由数个 GOP 组成;一个 GOP 又由一个 I 帧(帧内编码帧)及数个 B 帧(双向预测内插编码帧)和 P 帧(前向预测编码帧)组成.一个GOP 的结构由参数 M,N 来描述.下图是一个 GOP:
这个 GOP 中,M = 15,即每15帧里出现一次 I 帧;N = 3,即每3帧中出现一次 P 帧.
在视频的解码过程中,B,P 帧都需要通过确定 I 帧来构建图像.当用户第一次观看的时候,会寻找I帧,而播放器会到服务器寻找到最近的I帧反馈给用户.这里又会涉及到 GOP Cache 的问题,来解决视频播放的等待延时.感兴趣的同学可自行科普.
2.FFmpeg
FFmpeg 是一个完整的,跨平台的记录/转换音频,视频的开源程序.
这里贴两条我比较常用的命令
(1)通过 RTMP 发送媒体流的命令
ffmpeg -re -i "这里是源文件路径" -vcodec copy -f flv rtmp://localhost:1935/hls/abc
ffmpeg -f avfoundation -framerate 50 -i "1:0" -f avfoundation -framerate 30 -video_size 640x480 -i "0" -c:v libx264 -preset slow -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 2 -f flv rtmp://localhost:1935/hls/abc
3.H.264
5.m3u8
总结一下 iOS 直播所涉及到的知识点:
本文会不断的更新,总结.以上总结的部分,哪里有问题还望大家多多指出,我会马上修改更新!