基于FFmpeg的视频推流

来源:互联网 发布:ipad怎么在淘宝找微淘 编辑:程序博客网 时间:2024/05/18 03:45
前几天  项目经理给了一个需求,是一个报警功能,类似直播,可以拍摄身边的景象上传到服务器,当时还以为是录制视频然后回传给服务器,后来上网google了一下 才发现不是这个样子的。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。编码和推流,有两种方法来实现:一、javacv来实现

javacv地址:https://github.com/bytedeco/javacv
demo地址:https://github.com/beautifulSoup/RtmpRecoder/tree/master

二、使用Android自带的编码工具,可实现硬编码,这里有一个开源的封装很完善的库yasea,进行一些简单配置就可以实现编码推流,并且yasea目前已经直接支持摄像头的热切换,和各种滤镜效果。 

yasea地址:https://github.com/begeekmyfriend/yasea

非常简单,只要导入library,并添加一些权限就可以了。
    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.CAMERA" />    <uses-permission android:name="android.permission.RECORD_AUDIO" />  <usespermissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.FLASHLIGHT" />    <uses-feature android:name="android.hardware.camera.autofocus" />    <uses-feature android:glEsVersion="0x00020000" android:required="true" />
<net.ossrs.yasea.SrsCameraView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/glsurfaceview_camera"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"        android:layout_alignParentTop="true"        android:layout_alignParentRight="true"        android:layout_alignParentEnd="true" />
//java代码 需要实现接口 implements SrsEncodeHandler.SrsEncodeListener, RtmpHandler.RtmpListener, SrsRecordHandler.SrsRecordListener SrsCameraView cameraView = (SrsCameraView) findViewById(R.id.glsurfaceview_camera) mPublisher = new SrsPublisher(cameraView);        //编码状态回调        mPublisher.setEncodeHandler(new SrsEncodeHandler(this));        mPublisher.setRecordHandler(new SrsRecordHandler(this));        //rtmp推流状态回调        mPublisher.setRtmpHandler(new RtmpHandler(this));        //预览分辨率        mPublisher.setPreviewResolution(1280, 720);        //推流分辨率        mPublisher.setOutputResolution(720, 1280);        //传输率        mPublisher.setVideoHDMode();        //开启美颜(其他滤镜效果在MagicFilterType中查看)        mPublisher.switchCameraFilter(MagicFilterType.BEAUTY);        //打开摄像头,开始预览(未推流)        mPublisher.startCamera();        //mPublisher.switchToSoftEncoder();//选择软编码        mPublisher.switchToHardEncoder();//选择硬编码        //开始推流 rtmpUrl(ip换成服务器的部署ip):"rtmp://192.168.31.126/android/teststream"        mPublisher.startPublish(rtmpUrl);
是不是很简单呢?
阅读全文
1 0