Android直播实现(Android端推流、播放)

发布时间:2022-06-24 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android直播实现(Android端推流、播放)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

最近想实现一个Android直播,但是对于这方面的资料都比较零碎,一开始是打算用ffmpeg来实现编码推流,在搜集资料期间,找到了几个强大的开源库,直接避免了jni的代码,集成后只用少量的java代码就可实现编码、推流和取流播放,整理了一下做了一个demo,在这里记录一下

效果图:

Android直播实现(Android端推流、播放)

 

 

编码和推流,有两个方案选择:

一:使用javacv来实现,最终也是用过ffmpeg来进行编码和推流,javacv实现到可以直接接收摄像头的帧数据需要自己实现的代码只是打开摄像头,写一个SurfaceView进行预览,然后实现PreviewCallback将摄像头每一帧的数据交给javacv即可javacv地址:https://github.com/bytedeco/javacvdemo地址:https://github.com/beautifulSoup/RtmpRecoder/tree/master

二:使用Android自带的编码工具,可实现硬编码,这里有一个国内大神开源的封装很完善的的库yasea,第一种方法需要实现的Camera采集部分也一起封装好了,进行一些简单配置就可以实现编码推流,并且yasea目前已经直接支持摄像头的热切换,和各种滤镜效果yasea地址(内置demo):https://github.com/begeekmyfriend/yasea

服务器

流媒体服务器我用的是srs,项目地址:https://github.com/ossrs/srs关于srs的编译、配置、部署、在官方wiki中已经写的很详细了,并且srs同样是国内开发人员开源的项目,有全中文的文档,看起来很方便这里有最基本的简单编译部署过程 Android直播实现(二)srs流媒体服务器部署

播放器

android端的播放使用vitamio,还是国内的开源播放器,是不是感觉国内的前辈们越来越屌了^~^!vitamio支持几乎所有常见的的视频格式和流媒体协议vitamio地址(内置demo):https://github.com/yixia/VitamioBundle

这里使用的是yaesa库,先介绍一下直播实现的流程:一:使用yaesa进行摄像头采集、编码然后向srs服务器rtmp推流二:部署srs流媒体服务器三:使用vitamio取流播放

编码和推流已经整合在一起,demo地址:https://github.com/SiKang123/LiveTest


yaesa推流:

首先 clone yesa源码,导入library库

  1.  
    //布局文件中实现
  2.  
    <net.ossrs.yasea.SrsCameraView
  3.  
    android:id="@+id/glsurfaceview_camera"
  4.  
    android:layout_width="match_parent"
  5.  
    android:layout_height="match_parent"/>
  •  
  1.  
    //java代码 需要实现接口 implements SrsEncodeHandler.SrsEncodeListener, RtmpHandler.RtmpListener, SrsRecordHandler.SrsRecordListener
  2.  
     
  3.  
    SrsCameraView cameraView = (SrsCameraView) findViewById(R.id.glsurfaceview_camera)
  4.  
    mPublisher = new SrsPublisher(cameraView);
  5.  
    //编码状态回调
  6.  
    mPublisher.setEncodeHandler(new SrsEncodeHandler(this));
  7.  
    mPublisher.setRecordHandler(new SrsRecordHandler(this));
  8.  
    //rtmp推流状态回调
  9.  
    mPublisher.setRtmpHandler(new RtmpHandler(this));
  10.  
    //预览分辨率
  11.  
    mPublisher.setPreviewResolution(1280, 720);
  12.  
    //推流分辨率
  13.  
    mPublisher.setOutputResolution(720, 1280);
  14.  
    //传输率
  15.  
    mPublisher.setVideoHDMode();
  16.  
    //开启美颜(其他滤镜效果在MagicFilterType中查看)
  17.  
    mPublisher.switchCameraFilter(MagicFilterType.BEAUTY);
  18.  
    //打开摄像头,开始预览(未推流)
  19.  
    mPublisher.startCamera();
  20.  
    //mPublisher.switchToSoftEncoder();//选择软编码
  21.  
    mPublisher.switchToHardEncoder();//选择硬编码
  22.  
    //开始推流 rtmpUrl(ip换成服务器的部署ip):"rtmp://192.168.31.126/android/teststream"
  23.  
    mPublisher.startPublish(rtmpUrl);
  •  

关键代码就这么几句(状态回调有很多这里就不贴了,可以看demo),剩下的交给yasea,编码推流就搞定了,是不是简单到怀疑人生?


vitamio取流播放

首先还是clone vitamio的源码,导入vitamio库

  1.  
    /*首先不要忘了在Manifest里注册InitActivity*/
  2.  
    <activity
  3.  
    android:name="io.vov.vitamio.activity.InitActivity"
  4.  
    android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
  5.  
    android:launchMode="singleTop"
  6.  
    android:theme="@android:style/Theme.NoTitleBar"
  7.  
    android:windowSoftInputMode="stateAlwaysHidden" />
  8.  
     
  9.  
    /*布局文件*/
  10.  
    <io.vov.vitamio.widget.VideoView
  11.  
    android:id="@+id/surface_view"
  12.  
    android:layout_width="wrap_content"
  13.  
    android:layout_height="wrap_content" />
  •  
  1.  
    /*java代码*/
  2.  
     
  3.  
    /*onCreate中,用于检查vitamioLibs库是否准备完成
  4.  
    *如果Manifest中没有初始化InitActivity,这里会返回false,并自动初始化InitActivity
  5.  
    */
  6.  
    if (!LibsChecker.checkVitamioLibs(this))
  7.  
    return;
  8.  
     
  9.  
    VideoView mVideoView=(VideoView) findViewById(R.id.surface_view);
  10.  
    /*会有几秒延时*/
  11.  
    mVideoView.setVideoPath(rtmpUrl);
  •  

然后就可以开始愉快的播放rtmp流了,是不是简单到令人发指?

关键代码就这么多,具体代码可以看看demo:https://github.com/SiKang123/LiveTest

--------------------- 作者:Si-Kang 来源:CSDN 原文:https://blog.csdn.net/Mr_Sk/article/details/71083366?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!

 
 

脚本宝典总结

以上是脚本宝典为你收集整理的Android直播实现(Android端推流、播放)全部内容,希望文章能够帮你解决Android直播实现(Android端推流、播放)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: