当前位置: 首页 > news >正文

网站帮助页面设计搜索引擎优化搜索优化

网站帮助页面设计,搜索引擎优化搜索优化,河南鑫安胜通建设有限公司网站,用插件做的炫酷网站前言#xff1a;本文只是练习#xff0c;本文只是练习#xff0c;本文只是练习#xff01; 直播的核心就是推流和拉流#xff0c;我们就以RTMP的协议来实现下推流和拉流#xff0c;其他的协议等我学习后再来补充 1.推流 1.1搭建流媒体服务器#xff0c;具体搭建方法请参…前言本文只是练习本文只是练习本文只是练习 直播的核心就是推流和拉流我们就以RTMP的协议来实现下推流和拉流其他的协议等我学习后再来补充 1.推流 1.1搭建流媒体服务器具体搭建方法请参照Windows搭建RTMP服务器_rtmp服务器搭建-CSDN博客 一些软件需要搭梯子如果没法下载的可以联系下我我私发搭建好后在浏览器里输入http://localhost:9091/stat  出现该界面说明搭建成功 1.2推流上面的搭建文章有OBS推流和ffmpeg推流这些推流是软件操作和命令行操作在Andorid客户端不方便我们这里采用WangShuo1143368701/WSLiveDemo: 音视频直播SDKrtmp推流录制视频滤镜。百万用户线上迭代半年已经稳定。这个库来进行推流 1.2.1首先build.gradle里进行依赖 implementation com.github.WangShuo1143368701:WSLiveDemo:v1.7 1.2.2进行ndk配置 defaultConfig {applicationId com.anssy.videoliveminSdk 24targetSdk 34versionCode 1versionName 1.0ndk {// 设置支持的SO库架构开发者可以根据需要选择一个或多个平台的soabiFilters armeabi, armeabi-v7a, arm64-v8a, x86, arm64-v8a, x86_64}testInstrumentationRunner androidx.test.runner.AndroidJUnitRunner}1.2.3 接下来就是一些权限的申请布局的编写和对应代码的实现了申请的权限是Camera和Record Audio 这里引入一个常用的权限框架 implementation com.github.getActivity:XXPermissions:20.0 具体实现代码 activity_live_video.xml ?xml version1.0 encodingutf-8? RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentme.lake.librestreaming.ws.StreamLiveCameraViewandroid:idid/stream_previewViewandroid:layout_widthmatch_parentandroid:layout_aboveid/bottom_layoutandroid:layout_heightmatch_parent/LinearLayoutandroid:layout_widthmatch_parentandroid:orientationhorizontalandroid:idid/bottom_layoutandroid:layout_alignParentBottomtrueandroid:layout_heightwrap_contentButtonandroid:layout_width0dpandroid:text开始推流android:idid/btn_startStreamingandroid:layout_heightwrap_contentandroid:layout_weight1/Buttonandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:layout_weight1android:text停止推流android:idid/btn_stopStreaming/Buttonandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:layout_weight1android:idid/watch_liveandroid:text查看直播/Buttonandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:layout_weight1android:idid/btn_startRecordandroid:text开始录制/Buttonandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:layout_weight1android:idid/btn_stopRecordandroid:text停止录制//LinearLayout /RelativeLayout MainActivity.kt  这里有个注意点就是这个rtmp的地址自己搞了半天这个地址是你本地的IP在niginx里config文件里面配置的端口号然后后面的程序名称默认是live也可以是你配置的程序具体看画红框的部分 package com.anssy.videolive.uiimport android.content.Intent import android.os.Bundle import android.view.View import android.view.View.OnClickListener import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.anssy.videolive.R import com.anssy.videolive.databinding.ActivityLiveVideoBinding import com.hjq.permissions.OnPermissionCallback import com.hjq.permissions.Permission import com.hjq.permissions.XXPermissions import jp.co.cyberagent.android.gpuimage.GPUImageAddBlendFilter import me.lake.librestreaming.core.listener.RESConnectionListener import me.lake.librestreaming.filter.hardvideofilter.BaseHardVideoFilter import me.lake.librestreaming.filter.hardvideofilter.HardVideoGroupFilter import me.lake.librestreaming.ws.StreamAVOption import me.lake.librestreaming.ws.StreamLiveCameraView import me.lake.librestreaming.ws.filter.hardfilter.GPUImageBeautyFilter import me.lake.librestreaming.ws.filter.hardfilter.extra.GPUImageCompatibleFilter import java.util.LinkedList/*** Description rtmp的直播练习* Author yulu* CreateTime 2025年01月21日 09:14:03*/class MainActivity :AppCompatActivity(),RESConnectionListener,OnClickListener{private lateinit var mLiveCameraView: StreamLiveCameraViewprivate lateinit var streamAVOption: StreamAVOptionprivate val rtmpUrl rtmp://192.168.0.209:1935/hls/private lateinit var mMainViewBinding:ActivityLiveVideoBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)mMainViewBinding ActivityLiveVideoBinding.inflate(layoutInflater)setContentView(mMainViewBinding.root)initView()requestPermission()}/*** 请求权限*/private fun requestPermission() {val permissionList: MutableListString ArrayList()permissionList.add(Permission.CAMERA)permissionList.add(Permission.RECORD_AUDIO)XXPermissions.with(this).permission(permissionList).request(object : OnPermissionCallback {override fun onGranted(permissions: ListString, all: Boolean) {if (all) {initConfig()}}override fun onDenied(permissions: ListString, never: Boolean) {}})}private fun initView(){mLiveCameraView mMainViewBinding.streamPreviewViewmMainViewBinding.btnStartStreaming.setOnClickListener(this)mMainViewBinding.btnStopStreaming.setOnClickListener(this)mMainViewBinding.btnStartRecord.setOnClickListener(this)mMainViewBinding.btnStopRecord.setOnClickListener(this)mMainViewBinding.watchLive.setOnClickListener(this)}/*** 进行相关配置*/private fun initConfig() {//参数配置 startstreamAVOption StreamAVOption()streamAVOption.streamUrl rtmpUrl//参数配置 endmLiveCameraView.init(this, streamAVOption)mLiveCameraView.addStreamStateListener(this)//设置滤镜组val files LinkedListBaseHardVideoFilter()files.add(GPUImageCompatibleFilter(GPUImageBeautyFilter()))files.add(GPUImageCompatibleFilter(GPUImageAddBlendFilter()))mLiveCameraView.setHardVideoFilter(HardVideoGroupFilter(files))}override fun onDestroy() {super.onDestroy()mLiveCameraView.destroy()}override fun onOpenConnectionResult(result: Int) {//result 0成功 1 失败runOnUiThread {Toast.makeText(this,打开推流连接 状态$result 推流地址$rtmpUrl, Toast.LENGTH_LONG).show()}}override fun onWriteError(result: Int) {runOnUiThread {Toast.makeText(this,推流出错,请尝试重连,Toast.LENGTH_LONG).show()}}override fun onCloseConnectionResult(result: Int) {runOnUiThread {Toast.makeText(this,关闭推流连接 状态$result,Toast.LENGTH_LONG).show()}}override fun onClick(v: View) {when(v.id){//开始推流R.id.btn_startStreaming- {if (!mLiveCameraView.isStreaming) {mLiveCameraView.startStreaming(rtmpUrl)} else {Toast.makeText(this, 未打开, Toast.LENGTH_SHORT).show()}}//结束推流R.id.btn_stopStreaming-{if (mLiveCameraView.isStreaming) {mLiveCameraView.stopStreaming()}}//查看直播R.id.watch_live-{val intent Intent(this,VideoLiveActivity::class.java)intent.putExtra(url,this.rtmpUrl)startActivity(intent)}//开始录制R.id.btn_startRecord-{if (!mLiveCameraView.isRecord) {mLiveCameraView.startRecord()}}//结束录制R.id.btn_stopRecord-{if (mLiveCameraView.isRecord) {mLiveCameraView.stopRecord()}}}}} 弄完后就可以推流了推流成功的效果如下 2.拉流 2.1 VLC播放器播放在VLC播放器中输入推流的地址 点击媒体-打开网络串流-输入地址 rtmp://192.168.0.209:1935/hls/ 2.2使用IJK内核的播放器来播放该地址这里引入一个第三方库 Doikki/DKVideoPlayer: Android Video Player. 安卓视频播放器封装MediaPlayer、ExoPlayer、IjkPlayer。模仿抖音并实现预加载列表播放悬浮播放广告播放弹幕视频水印视频滤镜 build.gradle中依赖 implementation xyz.doikki.android.dkplayer:dkplayer-java:3.3.7implementation xyz.doikki.android.dkplayer:player-ijk:3.3.7implementation xyz.doikki.android.dkplayer:dkplayer-ui:3.3.7 application中初始化 package com.anssy.videolive.baseimport android.app.Application import xyz.doikki.videoplayer.ijk.IjkPlayerFactory import xyz.doikki.videoplayer.player.VideoViewConfig import xyz.doikki.videoplayer.player.VideoViewManager/*** Description TODO* Author yulu* CreateTime 2025年01月21日 09:44:15*/class BaseApplication : Application() {override fun onCreate() {super.onCreate()VideoViewManager.setConfig(VideoViewConfig.newBuilder().setPlayerFactory(IjkPlayerFactory.create())//使用使用IjkPlayer解码 直播使用.build())}} activity_video_play.xml ?xml version1.0 encodingutf-8? RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:backgroundcolor/blackandroid:layout_heightmatch_parentxyz.doikki.videoplayer.player.VideoViewandroid:idid/playerandroid:layout_centerInParenttrueandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent /LinearLayoutandroid:layout_width45dpandroid:layout_height45dpandroid:onClickbackandroid:idid/back_layoutandroid:orientationhorizontaltools:ignoreUsingOnClickInXmlImageViewandroid:idid/img_backandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterandroid:contentDescriptionnullandroid:scaleTypecenterInsideandroid:srcdrawable/back_sting_white //LinearLayout /RelativeLayout VideoLiveActivity.kt package com.anssy.videolive.uiimport android.os.Bundle import android.view.View import androidx.appcompat.app.AppCompatActivity import com.anssy.videolive.databinding.ActivityVideoPlayBinding import xyz.doikki.videocontroller.StandardVideoController/*** Description 用于直播播放的控制器* Author yulu* CreateTime 2025年01月21日 09:50:41*/class VideoLiveActivity : AppCompatActivity() {private lateinit var mVideoLiveVideoBinding: ActivityVideoPlayBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)mVideoLiveVideoBinding ActivityVideoPlayBinding.inflate(layoutInflater)setContentView(mVideoLiveVideoBinding.root)initView()}private fun initView() {mVideoLiveVideoBinding.player.setUrl(if (intent.getStringExtra(url)null) rtmp://192.168.0.209:1935/hls/ else intent.getStringExtra(url)) //设置视频地址val controller StandardVideoController(this)controller.addDefaultControlComponent(, false)mVideoLiveVideoBinding.player.setVideoController(controller) //设置控制器mVideoLiveVideoBinding.player.start() //开始播放不调用则不自动播放}public fun back(view:View){finish()}override fun onPause() {super.onPause()mVideoLiveVideoBinding.player.pause()}override fun onResume() {super.onResume()mVideoLiveVideoBinding.player.resume()}override fun onDestroy() {super.onDestroy()mVideoLiveVideoBinding.player.release()}override fun onBackPressed() {if (!mVideoLiveVideoBinding.player.onBackPressed()) {super.onBackPressed()}} } 播放效果 20250121_112120 源码下载地址rtmp练习kotlin资源-CSDN文库
http://www.hkea.cn/news/14577594/

相关文章:

  • 龙华城市建设局网站苏州网站开发公司电话
  • 网站域名到期登不上是怎么回事cnzz统计代码放在网站
  • 水利建设与管理司网站亚马逊网站链接
  • 贵阳市城乡建设厅网站受欢迎的手机网站建设
  • 微信公众平台绑定网站四川网站建设设计公司哪家好
  • 网站数据库到期外链信息
  • 昆明网站建设系统百度广告投放代理商
  • 服务专业公司网站建设服务济南建站公司效果
  • 百度网站推广找谁做关键词挖掘网站
  • 如何网站切换朋友圈转wordpress文章显示缩略图
  • 电子商务网站开发难点中国石油工程建设有限公司网站
  • 网站是专门对生活中的一些所谓常识做辟谣的wordpress获取token方法
  • 阿里云做网站步骤中山网站建设推广
  • 实验一html静态网站开发商城型网站建设代理加盟
  • 有没有专业做特产的网站网站搭建有分谷歌
  • 帮忙建网站的人档案网站建设对比
  • 济南做网站建设做视频网站视频短片
  • 如何用手机做网站魔艺极速建站
  • 品牌网站建设S苏州上海徐汇做网站
  • 做django后台网站岚山网站建设公司
  • 免费扑克网站阿里云 全国网站建设
  • 响应式网站模板 视差浙江建站
  • asp.net 网站 结构网站建设报价方案对比
  • 中文域名网站怎么发布信息网络规划设计师视频徐朋百度网盘
  • 有没有做问卷还能赚钱的网站保定最新消息发布
  • 我有域名跟空间能教我做网站吗云主机建网站教程
  • 360网站拦截做免费永久网站制作
  • 搜索网站建设推广优化百度seo公司报价
  • 上海网站设计哪家强如何登录中国建设银行网站
  • 怎么做网站卖保险中铁建设集团门户网登录入口官网