前言

想写关于NDK的文章很久了,但一直不知道该写点啥,该怎么写?正好公司有一个直播和播放的需求,那好吧,就造一个视频播放和视频直播的轮子吧。那说干就干!声明一下,本篇文章不会写怎样配置NDK等问题,只是大概介绍一下思路,具体代码已经放在Github上,大家可以下载代码自己进行定制或者直接引入进行使用。如果有幸帮到各位,那就请点一个Star,不胜感激。下面是具体使用方法:

引入依赖

首先在项目的build.gradle中添加以下代码:

allprojects {repositories {...maven { url 'https://jitpack.io' }}}

然后在需要使用的module的build.gradle中添加下面的依赖:

dependencies {implementation 'com.github.zhujiang521:Player:1.0.1'}

视频播放

说起视频播放,就不得不提ffmpeg,大多数视频播放器都使用的是ffmpeg进行私有定制。本项目使用的也是ffmpeg。

项目中使用的不是动态库(.so),而是静态库(.a),这样做的好处是可以使项目大大减小,并且可以自己对代码进行修改。

实现思路大概是创建两个线程:一个用来不断获取视频信息、一个用来不断获取音频信息,然后通过相对比丢帧实现音视频同步。

太详细的代码也不在这里贴了,大家可以直接查看代码。下面说一下使用方法吧:

视频播放使用很简单,只需一行代码即可使用,不但可以播放直播流,还可以播放本地视频,在播放本地视频的时候还实现了seekBar的随意拖动,大家可以尝试一下:

 BroadcastLive.create(TVChannelActivity.this).setDataUrl("直播地址").build();

是不是很简单?下面给大家几个可以使用的rtmp直播流:

tvBeanList.add(new TVBean("测试本地视频","/sdcard/Pictures/test.mp4"));tvBeanList.add(new TVBean("香港卫视","rtmp://live.hkstv.hk.lxdns.com/live/hks1"));tvBeanList.add(new TVBean("香港财经","rtmp://202.69.69.180:443/webcast/bshdlive-pc"));tvBeanList.add(new TVBean("韩国GoodTV","rtmp://mobliestream.c3tv.com:554/live/goodtv.sdp"));tvBeanList.add(new TVBean("韩国朝鲜日报","rtmp://live.chosun.gscdn.com/live/tvchosun1.stream"));tvBeanList.add(new TVBean("美国1","rtmp://ns8.indexforce.com/home/mystream"));tvBeanList.add(new TVBean("美国2","rtmp://media3.scctv.net/live/scctv_800"));tvBeanList.add(new TVBean("美国中文电视","rtmp://media3.sinovision.net:1935/live/livestream"));tvBeanList.add(new TVBean("湖南卫视","rtmp://58.200.131.2:1935/livetv/hunantv"));

里面有的可能没法用了,湖南卫视、美国中文电视应该还可以,没有一一去验证,大家可以试试。

播放里面的实现类没有写太多的方法,大家可以自己实现。

直播推流

直播很常见,现在更是全民直播,哪个平台基本都有直播功能,上面有了直播播放当然也要有直播推流啊。推流的时候也分为视频和音频。大概实现过程就是将视频和音频压缩成编码发送到服务器,然后直播播放那边实时获取推上去的流,再进行音视频解码。

本项目中音频编码使用的是Open SL,视频编码使用的是H264,同上,这里也不多赘述具体实现代码,项目中都有,大家可以进入我的Github查看。

下面是使用直播推流的方法:

LiveRecording.create(this).setDataUrl("推流的地址").setWidth(800).setHeight(400).setFps(10).setBitrate(800_000).build();

直播推流就比直播播放要多了几个方法,下面是方法的定义:

/*** 设置成像宽度* @param width* @return*/public LiveRecordingModel setWidth(int width) {this.width = width;return this;}/*** 设置成像高度* @param height* @return*/public LiveRecordingModel setHeight(int height) {this.height = height;return this;}/*** 设置直播比特率* @param bitrate* @return*/public LiveRecordingModel setBitrate(int bitrate) {this.bitrate = bitrate;return this;}/*** 设置FPS值* @param fps* @return*/public LiveRecordingModel setFps(int fps) {this.fps = fps;return this;}

总结

到这里这篇文章已经接近尾声了,也不知道怎么了,明明花了很久弄的项目,真正想写文章的时候却感觉不知道该如何下手,未来的几篇文章我想把直播推流和直播播放的c++代码拿出来写一写,包括在Android Studio中项目的配置、CMake的应用以及常见的NDK错误总结一下。希望大家能够喜欢。最后和大家说声抱歉,我在导入jitpack的时候一直报错,之前上传的普通项目都是可以的,但是不知道为什么NDK项目不可以,大家有办法的可以在评论区告诉我,提前谢谢了,如果想使用的话可以直接进我的Github下载代码,直接复制paly(直播播放)和audio(直播推流)这两个module进行使用。

之前确实无法在JetPack生成链接,一直爆红,前两天有人在Github中给我提了Issues,说只有debug包可以用,在打Release包时报错,首先想到的就是build.gradle有问题,果不其然,改了之后打Release包就可以了,而且在JetPack中也能上传成功了,之后大家用的时候直接调用上面的Gradle就可以了。

安卓实现视频直播(rtmp)以及直播推流(NDK实现)相关推荐

  1. 【Android RTMP】安卓直播推流总结 ( 直播服务器搭建 | NV21 图像采集 | H.264 视频编码 | PCM 音频采集 | AAC 音频编码 | RTMP 包封装推流 )

    文章目录 一. 安卓直播推流专栏博客总结 二. 相关资源介绍 三. GitHub 源码地址 四. 整体 Android 直播推流数据到服务器并观看直播演示过程 Android 直播推流流程 : 手机采 ...

  2. OBS如何配置推流到RTMP流媒体服务直播视频文件直播桌面操作让微信手机端电脑浏览器无插件直播观看

    OBS如何配置推流到RTMP流媒体服务直播视频文件直播桌面操作让微信手机端电脑浏览器无插件直播观看 1.下载安装OBS 1.1.官网下载 1.2.应用搜索下载 2.下载安装RTMP流媒体服务 3.获得 ...

  3. 安卓rtmp推流app_直播-腾讯云推流-sdk 播放地址不正确的解决方案---蜻蜓系统-uniapp-flutter通用...

    直播-腾讯云推流-sdk 播放地址不正确的解决方案---蜻蜓系统-uniapp-flutter通用 方法文件: /app/Services/LiveService.php 这个问题耽误了时间,有必要记 ...

  4. 【Android RTMP】RTMP 直播推流 ( 阿里云服务器购买 | 远程服务器控制 | 搭建 RTMP 服务器 | 服务器配置 | 推流软件配置 | 直播软件配置 | 推流直播效果展示 )

    文章目录 安卓直播推流专栏博客总结 一. 阿里云服务器购买 二. 远程服务器控制软件 三. 配置 Ubuntu 服务器 1 . 更新 apt 源 2 . 安装 pcre.OpenSSL.zlib 库 ...

  5. 2022 无人直播rtmp推流工具-技术实现与思路

    目前主流的直播软件(抖音.快手.斗鱼.虎牙等)均采用了 rtmp 协议推流 这篇文章探讨的是,如何编写一个rtmp服务器代理并替换其中视频流,实现无人直播或者录播 rtmp 协议是什么?怎么实现无人直 ...

  6. H264视频通过RTMP直播

    http://blog.csdn.net/firehood_/article/details/8783589 前面的文章中提到了通过RTSP(Real Time Streaming Protocol) ...

  7. android rtmp推流,使用MediaCodec和RTMP做直播推流

    目前开源的项目或市面上的Android直播客户端主要是用ffmpeg来实现推流的.本文将介绍使用Android原生的视频编码类MediaCodec实现直播推流. 数据流及大致原理 这里所说的直播,就是 ...

  8. Android视频直播的实现(推流完整实现001)

    http://blog.csdn.NET/huaxun66/article/details/53427771 http://blog.csdn.net/huaxun66/article/details ...

  9. 多路HDMI编码转RTMP多平台推流直播导播方案

    多路HDMI编码转RTMP多平台推流直播导播方案 今天我要给大家带来一个多路HDMI转RTMP多平台推流直播的方案,咱也不说这个方案是最优,但性能和稳定性却是响当当的好,该设备采用华为海思Hi3531 ...

  10. 某学校监控教学RTMP多平台推流直播方案

    某学校监控教学RTMP多平台推流直播方案 今天接到一个客户的需求,要求做一个学校教学的直播试点,萌生了我写这个方案的想法,下面先来看看这个学校的需求吧,希望也给其他学校提供借鉴. 客户的描述:&quo ...

最新文章

  1. 干货|深度学习实现零件的缺陷检测
  2. asp.net mvc 从数据库中读取图片的实现代码
  3. LIVE555再学习 -- testRTSPClient 源码分析
  4. 201712-2放学
  5. Android TimeAnimator
  6. 4245: KI的斐波那契 递归
  7. 【VSCode - Vetur 插件报错】Cannot find module ‘XXX‘ or its corresponding type declarations.Vetur(2307)
  8. java基础之算法_java基础之几种常见的排序算法
  9. hashmap value占用空间大小_如何获取 java hashmap占用存储空间空间大小
  10. CAD2012软件安装资料及教程
  11. 2021年全国大学生计算机能力挑战赛(Java)决赛试题代码(外加部分试题)
  12. pymol怎么做底物口袋表面_pymol常用操作
  13. android 平板刷机,小白必看,安卓平板电脑刷机教程之一键刷机
  14. php图片png转APNG,APNG\WEBP图片格式转换器
  15. “百亿消费券”之问:为什么是“618”?为何是京东?
  16. b站React禹哥版视频笔记-React应用(基于react脚手架)
  17. xxl-job配置发邮件 spring.mail的QQ邮箱配置
  18. 手机屏分几种?什么叫水滴屏、刘海屏、瀑布屏、全面屏?
  19. java xmap_转:使用XMAP完成JavaBean和XML之间转换
  20. 计算机配置高低怎么看,怎么查看电脑配置?(查看电脑配置高低的三种方法!)...

热门文章

  1. 剪辑视频,横屏改竖屏怎么操作
  2. 【第16题】猴子吃桃问题
  3. Photoshop的功能
  4. 收藏|精灵4RTK基于已有DEM数据或谷歌地形仿地飞行详解教程
  5. java获取时间戳和随机数
  6. 新手小白安装aio小主机布置家庭网络-2-PVE安装ikuai软路由
  7. java高校会议室预约系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  8. Acrobat DC 2022安装报错:无法安装服务Acrobat Update Service的解决方法
  9. Arduino+GM65(二维码模块)常见用法
  10. 我们买虚拟主机多少钱划算