ffmpeg实战教程(十一)手把手教你实现直播功能,不依赖第三方SDK
2017-05-19 20:24
316 查看
直播,2016最火的技术之一了,更多的关于直播的知识:http://blog.csdn.net/king1425/article/details/72489272 …这篇我们就不依赖任何集成好的SDK,自己搭建服务器,用ffmpeg+nginx实现手机直播功能
先上图:
推流的手机
拉流的网页和VL播放器
拉流的手机客户端
如果你没有编译好的ffmpeg+x264库也没关系,我最后会提供源码,包含了这些。
其中libnative-lib.so是我打包的采集推流的方法,使用方式如下
2.然后我们在建一个包 com.ws.ffmpegandroidcameralive,在这个包下写一个WSPlayer类。
initialize(int width,int height,String url) 是初始化方法,三个参数分别是视频的宽,高,以及,推流的地址。
start(byte[] cameraData);开始推流,参数传入相机的NV21数据。
stop();停止推流。
close();关闭。
3.编写界面
点击start开始推流
4.实现具体逻辑
activity中
在onCreate中初始化WSPlayer 其中rtmp://192.168.9.135:1935/wstv/home是我的服务器地址
WSPlayer.start(data) 在相机的预览回调里面开始添加数据进行推流
在activity的onPause()方法里面关闭推流
详情:demo下载:https://github.com/WangShuo1143368701/FFmpegandroidWSLive
先上图:
推流的手机
拉流的网页和VL播放器
拉流的手机客户端
对于nginx服务器的搭建之前有写过:
ffmpeg实战教程(九)windows下ffmpeg命令+nginx + rtmp实现推流,拉流。这篇也建议看一下:
关于音视频直播技术的总结下面开始实现手机直播功能
1.首先你要准备一份编译好的ffmpeg+x264库,我们打算软编码推流。如果你没有编译好的ffmpeg+x264库也没关系,我最后会提供源码,包含了这些。
其中libnative-lib.so是我打包的采集推流的方法,使用方式如下
2.然后我们在建一个包 com.ws.ffmpegandroidcameralive,在这个包下写一个WSPlayer类。
public class WSPlayer { static { System.loadLibrary("avutil-54"); System.loadLibrary("swresample-1"); System.loadLibrary("avcodec-56"); System.loadLibrary("avformat-56"); System.loadLibrary("swscale-3"); System.loadLibrary("postproc-53"); System.loadLibrary("avfilter-5"); System.loadLibrary("avdevice-56"); System.loadLibrary("native-lib"); } public static native int initialize(int width,int height,String url); public static native int start(byte[] cameraData); public static native int stop(); public static native int close(); }
initialize(int width,int height,String url) 是初始化方法,三个参数分别是视频的宽,高,以及,推流的地址。
start(byte[] cameraData);开始推流,参数传入相机的NV21数据。
stop();停止推流。
close();关闭。
3.编写界面
点击start开始推流
4.实现具体逻辑
activity中
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ... WSPlayer.initialize(mCamera.getParameters().getPreviewSize().width,mCamera.getParameters().getPreviewSize().height,"rtmp://192.168.9.135:1935/wstv/home"); ...
在onCreate中初始化WSPlayer 其中rtmp://192.168.9.135:1935/wstv/home是我的服务器地址
final Camera.PreviewCallback mPreviewCallbacx=new Camera.PreviewCallback() { @Override public void onPreviewFrame(byte[] data, Camera arg1) { WSPlayer.start(data); } };
WSPlayer.start(data) 在相机的预览回调里面开始添加数据进行推流
@Override protected void onPause(){ super.onPause(); WSPlayer.stop(); WSPlayer.close(); if(mCamera!=null){ mCamera.release(); mCamera=null; } }
在activity的onPause()方法里面关闭推流
详情:demo下载:https://github.com/WangShuo1143368701/FFmpegandroidWSLive
相关文章推荐
- [置顶] FFmpeg总结(十三)用ffmpeg基于nginx实现直播功能,不用第三方SDK,自研推流拉流
- ffmpeg实战教程(八)Android平台下AVfilter 实现水印,滤镜等特效功能
- Android实战——科大讯飞语音听写SDK的使用,实现语音识别功能
- Android实战简易教程-第六十六枪(结合SharedPreferenced实现自动登录功能)
- EasyRTMP实现对接海康、大华等IPCamera SDK进行RTMP推送直播功能
- Android简易实战教程--第十九话《手把手教您监听EditText文本变化,实现抖动和震动的效果》
- 【第三方SDK】使用百度云推送实现推送功能详解
- Android实战简易教程<三十九>(第三方短信验证平台Mob和验证码自动填入功能结合实例)
- 【第三方SDK】百度地图实现最简单的定位功能(无地图界面)
- Android实战简易教程<二十七>(Android设置头像上传功能实现)
- Android实战——科大讯飞语音听写SDK的使用,实现语音识别功能
- Android实战简易教程-第二十四枪(基于Baas的用户表查询功能实现!)
- Android实战简易教程-第五十三枪(通过实现OnScrollListener接口实现上拉加载更多功能)
- 最新Android实现分享到QQ QZone 博客功能(集成官方SDK,不使用第三方)
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【四】——实现模型工厂,依赖注入以及格式配置
- Android实战简易教程-第二十七枪(Android设置头像上传功能实现)
- Android简易实战教程--第十九话《手把手教您监听EditText文本变化,实现抖动和震动的效果》
- Django 学习小组:博客开发实战第五周教程 —— 实现评论功能