前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HLS推流的实现(iOS和OS X系统)

HLS推流的实现(iOS和OS X系统)

作者头像
落影
发布2018-04-27 16:51:00
3K0
发布2018-04-27 16:51:00
举报
文章被收录于专栏:落影的专栏落影的专栏

前言

使用VideoToolbox硬编码H.264

使用VideoToolbox硬解码H.264

使用AudioToolbox编码AAC

使用AudioToolbox播放AAC

HLS点播实现(H.264和AAC码流)

在前面我们介绍了从麦克风采集声音并用AudioToolbox编码成AAC码流从摄像头采集图像并用VideoToolbox编码成H.264码流,也尝试了把这两个格式的文件打包成TS流,并用通过HLS协议在浏览器播放,这一篇是在HLS点播实现(H.264和AAC码流)基础上的延续,进行HLS的推流。

核心思路

配置Nginx以支持HLS的推流与拉流,iOS系统使用LFLiveKit推流,OS X系统使用FFmpeg推流,拉流端可以使用Safari浏览器或者VLC播放器。

效果展示

具体步骤

1、配置Nginx,支持http协议拉流

在终端输入open -t /usr/local/etc/nginx/nginx.conf,找到图中代码位置,在下面插入配置信息。

代码语言:javascript
复制
location /hls {
        #Serve HLS config
        types {
            application/vnd.apple.mpegurl    m3u8;
            video/mp2t ts;
        }
        root /usr/local/var/www;
        add_header Cache-Control    no-cache;
    }
2、配置Nginx,支持rtmp协议推流

在终端输入open -t /usr/local/etc/nginx/nginx.conf,找到图中代码位置,在下面插入配置信息。

代码语言:javascript
复制
      application hls{
          live on;
          hls on;
          hls_path /usr/local/var/www/hls;
          hls_fragment 1s;
      }
3、重启Nginx

在终端输入nginx -s reload,重启Nginx。

如果在修改配置文件,重启遇到 [error] open() "/usr/local/var/run/nginx.pid" failed 可以用下面的命令重新加载配置 nginx -c /usr/local/etc/nginx/nginx.conf

4、OS X系统推流

使用FFmpeg对前文生成的mp4文件进行推流(FFmpeg的安装看HLS点播实现(H.264和AAC码流)

在终端输入指令:

代码语言:javascript
复制
ffmpeg -re -i abc.mp4 -vcodec copy -acodec copy  -f flv rtmp://localhost:1935/hls/abc

-vcodec copy 表示原有的编码,否则ffmpeg会重新编码,导致CPU飙升到200%以上 简书上有些对已有文件的推流ffmpeg指令是ffmpeg -re -i abc.mp4 -vcodec libx264 -acodec aac ,这是不合理的地方,要特别注意!

5、iOS系统推流

新建一个Xcode工程,在podfile输入pod 'LFLiveKit',执行pod install

附上简单开始推流代码:(LFLiveKit大赞)

代码语言:javascript
复制
- (IBAction)onStart:(UIButton *)sender {
    if ([sender.currentTitle isEqualToString:@"开始直播"]) {
        [sender setTitle:@"结束直播" forState:UIControlStateNormal];
        LFLiveStreamInfo *stream = [LFLiveStreamInfo new];
        stream.url = @"rtmp://172.17.44.151:1935/hls/abc";
        [self.session startLive:stream];
    }
    else {
        [sender setTitle:@"开始直播" forState:UIControlStateNormal];
        [self.session stopLive];
    }
}

完整工程代码点这里:代码地址

注意事项 Nginx服务器是在Mac跑的,iOS推流端不能把推流地址写成localhost!!! 在terminal输入ifconfig | grep inet

然后如果是局域网地址,iOS和Mac需要在同一个网络里面。

iOS端推流界面

6、Safari浏览器拉流

打开Mac自带的Safari浏览器,在地址栏输入:

http://localhost:8080/hls/abc.m3u8

7、VLC播放器拉流

打开VLC播放器,Command+N,在地址栏输入:

http://localhost:8080/hls/abc.m3u8

总结

本来想手写一次RTMP的推流,但是看到LFLiveKit之后,我觉得不用重复造轮子了,其详细的代码已经足够深入学习。

至此,我们熟悉了以下知识点:

  • 采集视频源和音频源的数据,视频采用H264编码,音频采用AAC编码
  • 视频和音频数据使用FFmpeg封装为MPEG-TS包和MP4文件
  • 使用FFmpeg推流

想深入了解rtmp的推流过程、应对网络变化的丢帧策略等可以看LFLiveKit的源码。

附上收藏的FFmpeg指令:

FFmpeg常用指令

FFmpeg常用指令2(https://link.jianshu.com/?t=%5Bhttp://blog.csdn.net/weiyuefei/article/details/51678582%5D(http://blog.csdn.net/weiyuefei/article/details/51678582%29)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.09.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 核心思路
  • 效果展示
  • 具体步骤
    • 1、配置Nginx,支持http协议拉流
      • 2、配置Nginx,支持rtmp协议推流
        • 3、重启Nginx
          • 4、OS X系统推流
            • 5、iOS系统推流
              • 6、Safari浏览器拉流
                • 7、VLC播放器拉流
                • 总结
                相关产品与服务
                云直播
                云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档