Author: admin

【如何快速的开发一个完整的iOS直播app】(美颜篇)

【如何快速的开发一个完整的iOS直播app】(美颜篇) 袁峥 关注 2016.09.25 17:58* 字数 1391 阅读 22154评论 38喜欢 230赞赏 2 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重要的,如果没有美颜功能,可能分分钟钟掉粉千万,本篇主要讲解直播中美颜功能的实现原理,并且实现美颜功能。 如果喜欢我的文章,可以关注我微博:袁峥Seemygo 利用GPUImage处理直播过程中美颜的流程 采集视频 => 获取每一帧图片 => 滤镜处理 => GPUImageView展示 美颜原理.png 美颜基本概念 GPU:(Graphic Processor Unit图形处理单元)手机或者电脑用于图像处理和渲染的硬件 GPU工作原理:采集数据-> 存入主内存(RAM) -> CPU(计算处理) -> 存入显存(VRAM) -> GPU(完成图像渲染) -> 帧缓冲区 -> 显示器 GPU工作原理.jpg OpenGL ES:(Open Graphics Library For Embedded(嵌入的) Systems 开源嵌入式系统图形处理框架),一套图形与硬件接口,用于把处理好的图片显示到屏幕上。 GPUImage:是一个基于OpenGL ES 2.0图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机和摄像机的实时滤镜,内置120多种滤镜效果,并且能够自定义图像滤镜。 滤镜处理的原理:就是把静态图片或者视频的每一帧进行图形变换再显示出来。它的本质就是像素点的坐标和颜色变化 GPUImage处理画面原理 GPUImage采用链式方式来处理画面,通过addTarget:方法为链条添加每个环节的对象,处理完一个target,就会把上一个环节处理好的图像数据传递下一个target去处理,称为GPUImage处理链。 比如:墨镜原理,从外界传来光线,会经过墨镜过滤,在传给我们的眼睛,就能感受到大白天也是乌黑一片,哈哈。 一般的target可分为两类 中间环节的target,…

Continue reading 【如何快速的开发一个完整的iOS直播app】(美颜篇)

【如何快速的开发一个完整的iOS直播app】(采集篇)

【如何快速的开发一个完整的iOS直播app】(采集篇) 袁峥 关注 2016.09.07 20:25* 字数 1425 阅读 24496评论 79喜欢 213赞赏 1 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,首先需要采集主播的视频和音频,然后传入流媒体服务器,本篇主要讲解如何采集主播的视频和音频,当前可以切换前置后置摄像头和焦点光标,但是美颜功能还没做,可以看见素颜的你,后续还会有直播的其他功能文章陆续发布。 如果喜欢我的文章,可以关注我微博:袁峥Seemygo 效果 为了采集效果图,我也是豁出去了,请忽略人物,关注技术。 忽略本人.png 基本知识介绍 AVFoundation: 音视频数据采集需要用AVFoundation框架. AVCaptureDevice:硬件设备,包括麦克风、摄像头,通过该对象可以设置物理设备的一些属性(例如相机聚焦、白平衡等) AVCaptureDeviceInput:硬件输入对象,可以根据AVCaptureDevice创建对应的AVCaptureDeviceInput对象,用于管理硬件输入数据。 AVCaptureOutput:硬件输出对象,用于接收各类输出数据,通常使用对应的子类AVCaptureAudioDataOutput(声音数据输出对象)、AVCaptureVideoDataOutput(视频数据输出对象) AVCaptionConnection:当把一个输入和输出添加到AVCaptureSession之后,AVCaptureSession就会在输入、输出设备之间建立连接,而且通过AVCaptureOutput可以获取这个连接对象。 AVCaptureVideoPreviewLayer:相机拍摄预览图层,能实时查看拍照或视频录制效果,创建该对象需要指定对应的AVCaptureSession对象,因为AVCaptureSession包含视频输入数据,有视频数据才能展示。 AVCaptureSession: 协调输入与输出之间传输数据 系统作用:可以操作硬件设备 工作原理:让App与系统之间产生一个捕获会话,相当于App与硬件设备有联系了, 我们只需要把硬件输入对象和输出对象添加到会话中,会话就会自动把硬件输入对象和输出产生连接,这样硬件输入与输出设备就能传输音视频数据。 现实生活场景:租客(输入钱),中介(会话),房东(输出房),租客和房东都在中介登记,中介就会让租客与房东之间产生联系,以后租客就能直接和房东联系了。 捕获音视频步骤:官方文档 1.创建AVCaptureSession对象 2.获取AVCaptureDevicel录像设备(摄像头),录音设备(麦克风),注意不具备输入数据功能,只是用来调节硬件设备的配置。 3.根据音频/视频硬件设备(AVCaptureDevice)创建音频/视频硬件输入数据对象(AVCaptureDeviceInput),专门管理数据输入。 4.创建视频输出数据管理对象(AVCaptureVideoDataOutput),并且设置样品缓存代理(setSampleBufferDelegate)就可以通过它拿到采集到的视频数据 5.创建音频输出数据管理对象(AVCaptureAudioDataOutput),并且设置样品缓存代理(setSampleBufferDelegate)就可以通过它拿到采集到的音频数据 6.将数据输入对象AVCaptureDeviceInput、数据输出对象AVCaptureOutput添加到媒体会话管理对象AVCaptureSession中,就会自动让音频输入与输出和视频输入与输出产生连接. 7.创建视频预览图层AVCaptureVideoPreviewLayer并指定媒体会话,添加图层到显示容器layer中 8.启动AVCaptureSession,只有开启,才会开始输入到输出数据流传输。 // 捕获音视频 – (void)setupCaputureVideo { // 1.创建捕获会话,必须要强引用,否则会被释放 AVCaptureSession *captureSession = [[AVCaptureSession alloc] init]; _captureSession = captureSession; //…

Continue reading 【如何快速的开发一个完整的iOS直播app】(采集篇)

【如何快速的开发一个完整的iOS直播app】(播放篇)

【如何快速的开发一个完整的iOS直播app】(播放篇) 袁峥 关注 2016.08.30 19:50* 字数 2369 阅读 57257评论 176喜欢 447赞赏 2 前言 在看这篇之前,如果您还不了解直播原理,请查看上篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,集成ijkplayer成功后,就算完成直播功能一半的工程了,只要有拉流url,就能播放直播啦 本篇主要讲解的是直播app中,需要用到的一个很重要的开源框架ijkplayer,然后集成这个框架可能对大多数初学者还是比较有难度的,所以本篇主要教你解决集成【ijkplayer】遇见的各种坑。 很多文章,可能讲解的是如何做,我比较注重讲解为什么这样做,大家有什么不明白,还可以多多提出来。 如果喜欢我的文章,可以关注我微博:袁峥Seemygo 效果 直播.gif 一、基本知识 README.md文件:框架的描述文件,描述这个框架怎么使用 编译语言:程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要翻译,所以编译型语言的程序执行效率高,比如OC,C,C++ 解释性语言:解释性语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低 解释性语言执行和编译语言执行的区别: 解释性语言一行一行的解析,如果有错误,就不会执行,直接执行下一行。 编译语言,只要有错,就不能编译,一行都不能执行。 脚本语言:属于解析语言,必须通过解释器解析,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。 python:脚本语言,适合网络应用程序的开发,有利于开发效率,现在显得越来越强大 PHP:服务器端脚本语言,适合做动态网站 JS:作为客户端的脚本语言,在浏览中解释执行, shell:操作系统脚本语言,一般指Unix/Linux中使用的命令行 编译语言,执行文件是二进制。脚本语言是解释执行的,执行文件是文本 shell解释器:shell是一个命令行解释器,相当于windows的cmd,处于内核和用户之间,负责把用户的指令传递给内核并且把执行结果回显给用户. 默认Unix都有shell,OS基于Unix,因此OS自带shell。 bash: bash是一种shell解释器版本,shell有很多种版本,就像人,也分不同国家的人。 牛程序员看到不爽的Shell解释器,就会自己重新写一套,慢慢形成了一些标准,常用的Shell解释器有这么几种,sh、bash、csh等 shell:通常我们说的shell,指的是shell脚本语言,而不是shell解释器。 在编写shell时,第一行一定要指明系统需要哪种shell解释器解释你的shell脚本,如:#! /bin/bash,使用bash解析脚本语言 什么时候使用shell命令,比如有些系统命令经常需要用到,可以把命令封装到一个脚本文件,以后就不用再敲一遍了,直接执行脚本语言。 比如ijkplayer,就用脚本文件下载ffmpeg,因为下载ffmpeg需要执行很多命令,全部封装到脚本文件中。 在导入一些第三方框架的时候,经常需要用到一些命令,所以一般都会封装到一个脚本文件中,以后只要执行脚本,就会自动执行集成第三方框架的命令。 sh:sheel脚本文件后缀名 二、下载ijkPlayer 去到B站得github主页,找到ijkplayer项目,下载源码 ijkplayer下载地址 打开Demo,查看用法,一般学习第三方库,都是先查看Demo Snip20160825_4.png 三、编译ijkPlayer的步骤 1、找到ijkPlayerMediaDemo并运行 提示’libavformat/avformat.h’ file not found bug1.png 原因:因为libavformat是ffmpeg中的库,而ijkplayer是基于ffmpeg这个库的,因此需要导入ffmpeg 解决:查看ijkplayer的README.md,一般都会有说明。…

Continue reading 【如何快速的开发一个完整的iOS直播app】(播放篇)

【如何快速的开发一个完整的iOS直播app】(原理篇)

【如何快速的开发一个完整的iOS直播app】(原理篇) 袁峥 关注 2016.08.25 20:29* 字数 6674 阅读 109226评论 126喜欢 1478赞赏 6 目录 【如何快速的开发一个完整的iOS直播app】(原理篇) 【如何快速的开发一个完整的iOS直播app】(播放篇) 【如何快速的开发一个完整的iOS直播app】(采集篇) 【如何快速的开发一个完整的iOS直播app】(美颜篇) 前言 大半年没写博客了,但我一直关注着互联网的动向,最近会研究很多东西,并分享,今年移动直播行业的兴起,诞生了一大批网红,甚至明星也开始直播了,因此不得不跟上时代的步伐,由于第一次接触的原因,因此花了很多时间了解直播,整理了直播的原理,当前只是原理篇,后续会持续发布实战篇,教你从零开始搭建一个完整的iOS直播app,希望能帮助到更多的人更快的了解直播。 如果喜欢我的文章,可以关注我微博:袁峥Seemygo 一、个人见解(直播难与易) 直播难:个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,CDN分发,即时通讯等技术,每一个技术都够你学几年的。 直播易:已经有各个领域的大牛,封装好了许多牛逼的框架,我们只需要用别人写好的框架,就能快速的搭建一个直播app,也就是传说中的站在大牛肩膀上编程。 二、了解直播 热门直播产品 映客,斗鱼,熊猫,虎牙,花椒等等 直播效果图 直播效果.jpeg 1.一个完整直播app功能(来自落影loyinglin分享) 1、聊天 私聊、聊天室、点亮、推送、黑名单等; 2、礼物 普通礼物、豪华礼物、红包、排行榜、第三方充值、内购、礼物动态更新、提现等; 3、直播列表 关注、热门、最新、分类直播用户列表等; 4、自己直播 录制、推流、解码、播放、美颜、心跳、后台切换、主播对管理员操作、管理员对用户等; 5、房间逻辑 创建房间、进入房间、退出房间、关闭房间、切换房间、房间管理员设置、房间用户列表等; 6、用户逻辑 普通登陆、第三方登陆、注册、搜索、修改个人信息、关注列表、粉丝列表、忘记密码、查看个人信息、收入榜、关注和取关、检索等; 7、观看直播 聊天信息、滚屏弹幕、礼物显示、加载界面等; 8、统计 APP业务统计、第三方统计等; 9、超管 禁播、隐藏、审核等; 2.一个完整直播app原理 直播原理:把主播录制的视频,推送到服务器,在由服务器分发给观众观看。 直播环节:推流端(采集、美颜处理、编码、推流)、服务端处理(转码、录制、截图、鉴黄)、播放器(拉流、解码、渲染)、互动系统(聊天室、礼物系统、赞) 3.一个完整直播app实现流程 1.采集、2.滤镜处理、3.编码、4.推流、5.CDN分发、6.拉流、7.解码、8.播放、9.聊天互动 直播流程.png 4.一个完整直播app架构 直播架构.png 5.一个完整直播app技术点 WeChat_1472043345.jpeg 三、了解流媒体(直播需要用到流媒体)…

Continue reading 【如何快速的开发一个完整的iOS直播app】(原理篇)

狗宝宝起名:狗宝宝取名大全2018款

狗宝宝起名:狗宝宝取名大全2018款 2018-01-25出处:其他作者:佚名 关键词:狗宝宝取名 狗年宝宝起名大全 2018狗宝宝取名大全   狗年的孩子出生之后,父母应该如何给属狗的宝宝起名字呢?有什么方法是教父母取名的吗?那么接下来小编就来分享狗宝宝取名方法大全2018款。 狗宝宝取名大全2018款 属狗女宝宝取名方法大全2018款 ①、女孩起名用彩艳字。 如:倩、素、黄、绛、丹、秀、美、丽、红、绿、碧、艳、彩、紫、彤、青、翠。 参考:王珞丹,中国内地女演员。丹字代表着红色,最新一期《跨界歌王》播出,王珞丹重唱电视剧《奋斗》经典插曲《左边》,佟大为、李小璐录制VCR惊喜助阵好友王珞丹,《奋斗》主演十年后跨屏重聚。节目播出后,王珞丹在个人微博po出现场演唱视频配《奋斗》画面混剪,并配文称:“十年前的你们都还好吗?幸运如我,十年前在最美的年华遇见你们。” ②、女孩起名用重叠字。 如:丹丹、婷婷、倩倩、燕燕、君君、莎莎、丽丽、红红、盼盼、芳芳、媛媛。 参考:甘婷婷,1986年2月5日生,女演员,婷婷自由亭亭玉立的感觉。由DMG印纪传媒出品、高升中执导,盛一伦、秦海璐、甘婷婷等实力派演员主演的民国年代戏《十里洋场拾年花》正在横店热拍,自开拍以来就备受期待,国风美人甘婷婷的加盟为该剧更添色彩,随着官方剧照、先导片的陆续发布,粉丝纷纷称赞甘婷婷眼里有戏“一秒穿越到民国的上海”。 ③、女孩起名用诗词、典故。 如:心悠、子衿取自“青青子衿悠悠我心”;水清取自“羡彼之良质兮,冰清玉润,羡彼之华服兮,闪灼文章。”。 ④、女孩起名用珍宝字。 如:璧、宝、珍、金、银、玉、珠、莹、琼、瑶、琳、玲、珊。 ⑤、女孩起名用闺物字。 如:瓶、琴、香、线、绣、锦、环、钗、缨、黛。 ⑥、女孩起名用女子旁的字。 如:娥、妙、美、婷、素、娥、亚、玉、婵、婵、娟、娉、婷、娇、妮、丽、娜。更多相关阅读:怎样给2018狗年出生的女宝宝取名? 属狗男宝宝取名方法大全2018款 ①、男孩起名用秉性气质的字。 如:俊、勇、雄、英、坚、毅、韧、豪、猛、刚。 ②、男孩起名用美好祝愿的字。 如:祥、年、安、乎、福、财、禧、康、瑞、吉、禄、贵、寿。 ③、男孩起名用承寄托的字。 如:世、宗、先、祖、根、柱、昌。 ④、男孩起名用品德的字。 如:章、斌、礼、智、信、仁、义、孝、忠、良、勤、俭、廉、文、德、诚、伦。 ⑤、男孩起名用表志向和抱负的字。 如:国、举、博、宏、登、大、杰、邦。 ⑥、男孩起名用地理名词。 如:江、湖、海、山。更多相关阅读:怎样给2018狗年出生的男宝宝取名?

Continue reading 狗宝宝起名:狗宝宝取名大全2018款

在Windows下搭建基于nginx的视频直播和点播系统

一、软件准备 由于nginx原生是为linux服务的,因此官方并没有编译好的windows版本可以下载,要在windows上使用nginx,要么下载源码进行编译,要么使用其他人已经编译好的文件。 而要让nginx支持视频直播和点播,还需要第三方的nginx模块:nginx-rtmp-module 所幸,已经有大神做好了nginx的编译,而且集成了很多nginx模块,其中就已经包括了nginx-rtmp-module。 下载地址:http://nginx-win.ecsds.eu/,详细说明可参见:Readme nginx-win version.txt 我下载的是nginx 1.7.11.3 Gryphon这个版本。 这个网站同时也提供了vcredist的下载(x86,x64),以避免运行nginx时出现缺少库的错误。 另外还要下载 stat.xsl 用于显示当前ngix-rtmp服务状态 另外还需要下载ffmpeg、ffplay、yamdi: 总结如下: 1. nginx 1.7.11.3 Gryphon 2. stat.xsl 3. ffmpeg、ffplay 4. yamdi 二、Nginx 配置 1. nginx配置 worker_processes 1; error_log logs/error.log debug; events { worker_connections 1024; } rtmp { server { listen 1935; application hls { live on; #启用rtmp直播 #地址为rtmp://[server]:[rtmp_port]/[app]/[stream] hls on;…

Continue reading 在Windows下搭建基于nginx的视频直播和点播系统

樹莓派架設 RTMP 串流(Streaming)伺服器,傳送即時攝影機影像

https://www.google.com.tw/amp/s/blog.gtwang.org/iot/raspberry-pi-nginx-rtmp-server-live-streaming/amp/   樹莓派架設 RTMP 串流(Streaming)伺服器,傳送即時攝影機影像 這裡介紹使用樹莓派安裝 nginx 架設 RTMP 串流伺服器,傳送即時的攝影機影像。 樹莓派加上一個網路攝影機(webcam)之後,就可以用來打造一個即時的 live 影像串流伺服器,作為簡單的監控設備,讓您透過電腦或是手機看到即時的攝影機畫面。 在本篇教學中所使用的設備與規格為: 樹莓派 Raspberry Pi B+ 開發板 羅技 C170 視訊攝影機 以下是架設 RTMP 串流(Streaming)伺服器的安裝過程。 安裝 nginx 伺服器 我們選用 nginx 再加上一個 nginx-rtmp-module 模組作為主要對外服務的伺服器,在自行編譯與安裝之前,我們先用 apt 裝一下系統套件厙中的 nginx,然後在將其移除: sudo apt-get update sudo apt-get -y install nginx sudo apt-get -y remove nginx sudo apt-get clean 這樣做的目的是讓它自動把 nginx 相依的套件安裝好,並設定好系統的環境(例如…

Continue reading 樹莓派架設 RTMP 串流(Streaming)伺服器,傳送即時攝影機影像