国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android WebRTC+SRS/ZLM視頻通話(5):Android使用WebRTC從SRS/ZLMediaKit拉流

這篇具有很好參考價(jià)值的文章主要介紹了Android WebRTC+SRS/ZLM視頻通話(5):Android使用WebRTC從SRS/ZLMediaKit拉流。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Android WebRTC+SRS/ZLM視頻通話(5):Android使用WebRTC從SRS/ZLMediaKit拉流

來自奔三人員的焦慮日志

接著上一章內(nèi)容,繼續(xù)來記錄Android是如何使用WebRTC從SRS/ZLMediaKit拉流播放。WebRTC是一種實(shí)現(xiàn)實(shí)時(shí)音視頻通信的技術(shù),而SRS(SRS Streaming Cluster)和ZLMediaKit則是兩種常用的流媒體服務(wù)。 Android 平臺(tái)上,可以使用 WebRTC 從 SRS/ZLMediaKit 中拉取流并進(jìn)行播放。

WebRTC推拉流的區(qū)別

推流:WebRTC 中的推流通常指將本地音視頻流發(fā)送到遠(yuǎn)端。推流涉及到本地設(shè)備上的音視頻采集、編碼、傳輸?shù)冗^程。

拉流:WebRTC 中的拉流通常指從遠(yuǎn)端獲取音視頻流并進(jìn)行播放。拉流涉及到 RTCPeerConnection 對(duì)象的建立和音視頻解碼等過程。拉流可以用于實(shí)現(xiàn)實(shí)時(shí)音視頻播放、音視頻錄制等場(chǎng)景。

總的來說,WebRTC 的推拉流都是通過 PeerConnection 對(duì)象進(jìn)行實(shí)現(xiàn),具體的實(shí)現(xiàn)細(xì)節(jié)會(huì)有一些不同。其中推流涉及到本地設(shè)備的音視頻采集和編碼等過程,而拉流則是接收遠(yuǎn)端的音視頻流進(jìn)行解碼和播放。

注意:這里暫不考慮NAT可穿透服務(wù)器,詳情可了解STUN/TURN 服務(wù)器的搭建和使用

別看一堆文字就頭大,實(shí)際上也就是兩行代碼的事,注意初始化時(shí)PeerConnection!!.addTransceiver方法的參數(shù)設(shè)置即可。去掉視頻、音頻采集等代碼,剩下的就是交換sdp的API地址變一下就好。

		//拉流
        if (!isPublish) {
            peerConnection!!.addTransceiver(
                MediaStreamTrack.MediaType.MEDIA_TYPE_AUDIO,
                RtpTransceiver.RtpTransceiverInit(RtpTransceiver.RtpTransceiverDirection.RECV_ONLY)
            )
            peerConnection!!.addTransceiver(
                MediaStreamTrack.MediaType.MEDIA_TYPE_VIDEO,
                RtpTransceiver.RtpTransceiverInit(RtpTransceiver.RtpTransceiverDirection.RECV_ONLY)
            )
        }
        //推流
        else {
            peerConnection!!.addTransceiver(
                MediaStreamTrack.MediaType.MEDIA_TYPE_AUDIO,
                RtpTransceiver.RtpTransceiverInit(RtpTransceiver.RtpTransceiverDirection.SEND_ONLY)
            )
            peerConnection!!.addTransceiver(
                MediaStreamTrack.MediaType.MEDIA_TYPE_VIDEO,
                RtpTransceiver.RtpTransceiverInit(RtpTransceiver.RtpTransceiverDirection.SEND_ONLY)
            )
         }

這里我已經(jīng)封裝成工具類,詳情看WebRTCUtil

頁面代碼

跟推流類似,我們新增一個(gè)預(yù)覽頁面、播放地址文本和一個(gè)開始拉流按鈕,具體看下面代碼:

					//拉流地址
                    Row(
                        modifier = Modifier.fillMaxWidth(),
                        verticalAlignment = Alignment.CenterVertically
                    ) {
                        Box(
                            modifier = Modifier.weight(1f)
                        ) {
                            Text(text = playUrl.value)
                        }
                        Box(
                            modifier = Modifier
                                .clickable {
                                    doPlay()//開始播放
                                }
                                .width(80.dp)
                                .background(
                                    Color.White,
                                    RoundedCornerShape(5.dp)
                                )
                                .border(
                                    1.dp,
                                    Color(0xFF000000),
                                    shape = RoundedCornerShape(5.dp)
                                )
                                .padding(5.dp),
                            contentAlignment = Alignment.Center
                        ) {
                            Text(text = "拉流")
                        }
                    }
                    //拉流部分
                    Box(
                        modifier = Modifier
                            .fillMaxWidth()
                            .height(300.dp)
                    ) {
                        surfaceViewRenderer2 = mSurfaceViewRenderer2(mEglBase, webRtcUtil2!!)
                        AndroidView({ surfaceViewRenderer2!! }) { videoView ->
                            CoroutineScope(Dispatchers.Main).launch {
                                //根據(jù)視頻大小縮放surfaceViewRenderer控件
                                var screenSize = "480-640"
                                var screenSizeD = 720 / 1280.0
                                val screenSizeS: Array<String> =
                                    screenSize.split("-").toTypedArray()
                                screenSizeD =
                                    screenSizeS[0].toInt() / (screenSizeS[1].toInt() * 1.0)
                                var finalScreenSizeD = screenSizeD
                                var vto = videoView.viewTreeObserver
                                vto.addOnPreDrawListener {
                                    var width: Int = videoView.measuredWidth
                                    var height: Int = (finalScreenSizeD * width).toInt()
                                    //獲取到寬度和高度后,可用于計(jì)算
                                    var layoutParams = videoView.layoutParams
                                    layoutParams.height = height
                                    videoView.layoutParams = layoutParams
                                    true
                                }
                            }
                        }
                    }
@Composable
fun mSurfaceViewRenderer2(mEglBase: EglBase, webRtcUtil2: WebRTCUtil): SurfaceViewRenderer {
    val context = LocalContext.current
    val surfaceViewRenderer = remember {
        SurfaceViewRenderer(context).apply {
            id = R.id.surface_view_2
        }
    }
    //Makes MapView follow the lifecycle of this composable
    val lifecycleObserver = rememberMapLifecycleObserver(surfaceViewRenderer, mEglBase, webRtcUtil2)
    val lifecycle = LocalLifecycleOwner.current.lifecycle
    DisposableEffect(lifecycle) {
        lifecycle.addObserver(lifecycleObserver)
        onDispose {
            lifecycle.removeObserver(lifecycleObserver)
        }
    }
    return surfaceViewRenderer
}
	private var webRtcUtil2: WebRTCUtil? = null
    private var playUrl =
        mutableStateOf("https://192.168.1.172/index/api/webrtc?app=live&stream=test&type=play")
    private var surfaceViewRenderer2: SurfaceViewRenderer? = null
    /**
     * 開始播放
     */
    private fun doPlay() {
        if (webRtcUtil2 != null) {
            webRtcUtil2!!.destroy()
        }
        webRtcUtil2 = WebRTCUtil(this@MainActivity)
        webRtcUtil2!!.create(
            mEglBase,
            surfaceViewRenderer2,
            isPublish = false,
            isShowCamera = true,
            playUrl = playUrl.value,
            callBack = object : WebRTCUtil.WebRtcCallBack {
                override fun onSuccess() {}
                override fun onFail() {}
            })
    }

主要新增這幾個(gè),詳情可到Gitee拉取完整Demo

運(yùn)行效果

Android WebRTC+SRS/ZLM視頻通話(5):Android使用WebRTC從SRS/ZLMediaKit拉流,Android WebRTC+SRS/ZLM視頻通話,android,webrtc,音視頻,WebRTC拉流,ZLMediaKit

第五章到這里就結(jié)束了,下節(jié)繼續(xù)記錄Android如何往SRS推拉流,占用您的垃圾時(shí)間了,實(shí)在對(duì)不住文章來源地址http://www.zghlxwxcb.cn/news/detail-623085.html

THE END


感謝查閱
玉念聿輝:編輯

到了這里,關(guān)于Android WebRTC+SRS/ZLM視頻通話(5):Android使用WebRTC從SRS/ZLMediaKit拉流的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SRS4 對(duì)接??低旼B28181協(xié)議推流 RTMP、webRTC拉流

    SRS4 對(duì)接海康威視GB28181協(xié)議推流 RTMP、webRTC拉流

    Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-88-generic x86_64) 編譯SRS,需要切換到Develop分支,并開啟gb28181功能: 配置文件:push.gb28181.conf Remark: 一定要修改配置文件中的host配置,改成你的服務(wù)器的IP,攝像頭能訪問到的這個(gè)IP。后續(xù)會(huì)改進(jìn)為自動(dòng)獲取,目前還需要修改配置。 然后使用配置文件

    2023年04月08日
    瀏覽(25)
  • SRS服務(wù)器RTMP2WebRTC外網(wǎng)拉流配置

    將前端服務(wù)開放到外網(wǎng),并且在外網(wǎng)使用WebRTC拉流,要求全部使用同一端口。 外網(wǎng)地址:10.172.59.42(域名:test.com)外網(wǎng)端口為33333 內(nèi)網(wǎng)SRS服務(wù)器地址:192.168.5.177,內(nèi)網(wǎng)端口為10090 路由器將外網(wǎng)33333端口映射到內(nèi)網(wǎng)192.168.5.177:10090 一、使用docker搭建SRS服務(wù)器 1、編輯~/.bashrc,添

    2024年04月11日
    瀏覽(45)
  • SRS流媒體服務(wù)器——SRS4.0 WebRTC一對(duì)一通話環(huán)境搭建與邏輯分析

    SRS流媒體服務(wù)器——SRS4.0 WebRTC一對(duì)一通話環(huán)境搭建與邏輯分析

    環(huán)境搭建 SRS4.0 WebRTC1對(duì)1通話邏輯分析 1. 安裝go語?環(huán)境 在Go語?官?找到對(duì)應(yīng)的安裝包(Downloads - The Go Programming Language) 下載和解析(使用的是阿里云的Ubuntu系統(tǒng)): 3.需要配置 GOROOT 和 PATH環(huán)境變量,在/etc/profile中配置。 4. 然后使用 source /etc/profile 命令使配置文件生效,就

    2023年04月08日
    瀏覽(42)
  • WebRTC音視頻通話-WebRTC本地視頻通話使用ossrs服務(wù)搭建

    WebRTC音視頻通話-WebRTC本地視頻通話使用ossrs服務(wù)搭建

    iOS開發(fā)-ossrs服務(wù)WebRTC本地視頻通話服務(wù)搭建 之前開發(fā)中使用到了ossrs,這里記錄一下ossrs支持的WebRTC本地服務(wù)搭建。 ossrs是什么呢? SRS(Simple Realtime Server)是一個(gè)簡(jiǎn)單高效的實(shí)時(shí)視頻服務(wù)器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT等多種實(shí)時(shí)流媒體協(xié)議。 官網(wǎng)地址:https://ossrs.net/lt

    2024年02月12日
    瀏覽(22)
  • Windows7中使用SRS集成音視頻一對(duì)一通話

    Windows7中使用SRS集成音視頻一對(duì)一通話

    SRS早就具備了SFU的能力,比如一對(duì)一通話、多人通話、直播連麥等等。在溝通中,一對(duì)一是常用而且典型的場(chǎng)景, 讓我們一起來看看如何用SRS做直播和RTC一體化的一對(duì)一通話。 一、啟動(dòng)windows7-docker ?二、拉取SRS鏡像 執(zhí)行命令:docker pull ossrs/srs:4 使用docker images查看當(dāng)前鏡像列

    2024年02月16日
    瀏覽(25)
  • 視頻直播新時(shí)代,低延時(shí)直播交互,Web,Android,WebRtc推流拉流測(cè)試

    視頻直播新時(shí)代,低延時(shí)直播交互,Web,Android,WebRtc推流拉流測(cè)試

    直播現(xiàn)在已經(jīng)深入了生活,學(xué)習(xí),工作和娛樂方方面面,由于前些年的技術(shù)所限,傳統(tǒng)rtmp,flv,m3u8?技術(shù)讓直播快速啟動(dòng)項(xiàng)目產(chǎn)品,但也有很多不足,特別的交互式直播,一直是其中的痛點(diǎn),延時(shí)較大(1-10秒不等) 讓用戶即想用,已不是太爽,隨技術(shù)進(jìn)步,Webrtc已經(jīng)切入了視

    2024年01月19日
    瀏覽(26)
  • WebRTC實(shí)戰(zhàn)-第二章-使用WebRTC實(shí)現(xiàn)音視頻通話

    WebRTC實(shí)戰(zhàn)-第二章-使用WebRTC實(shí)現(xiàn)音視頻通話

    、 什么是WebRTC|WebRTC入門到精通必看|快速學(xué)會(huì)音視頻通話原理|WebRTC超全資料分享FFmpeg/rtmp/hls/rtsp/SRS WebRTC **WebRTC詳細(xì)指南** http://www.vue5.com/webrtc/webrtc.html WEBRTC三種類型(Mesh、MCU 和 SFU)的多方通信架構(gòu) WebRTC API包括媒體捕獲,音頻和視頻編碼和解碼,傳輸層和會(huì)話管理 。 假設(shè)

    2023年04月12日
    瀏覽(20)
  • Android平臺(tái)一對(duì)一音視頻通話方案對(duì)比:WebRTC VS RTMP VS RTSP

    Android平臺(tái)一對(duì)一音視頻通話方案對(duì)比:WebRTC VS RTMP VS RTSP

    一對(duì)一音視頻通話使用場(chǎng)景 一對(duì)一音視頻通話都需要穩(wěn)定、清晰和流暢,以確保良好的用戶體驗(yàn),常用的使用場(chǎng)景如下: 社交應(yīng)用 :社交應(yīng)用是一種常見的使用場(chǎng)景,用戶可以通過音視頻通話進(jìn)行面對(duì)面的交流; 在線教育: 老師和學(xué)生可以通過音視頻通話功能進(jìn)行實(shí)時(shí)互

    2024年02月13日
    瀏覽(24)
  • SpringBoot+WebSocket+Vue+PeerJs實(shí)現(xiàn)WebRTC視頻通話功能,Vue視頻通話,web視頻通話,webrtc視頻通話

    SpringBoot+WebSocket+Vue+PeerJs實(shí)現(xiàn)WebRTC視頻通話功能,Vue視頻通話,web視頻通話,webrtc視頻通話

    博主正在擔(dān)任一款電商app的全棧開發(fā),其中涉及到一個(gè) 視頻通話 功能。但是由于業(yè)務(wù)需求及成本考慮,不能使用第三方提供的SDK進(jìn)行開發(fā)。所以博主選擇使用PeerJs+WebSocket來實(shí)現(xiàn)這個(gè)功能。 WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議。WebSocket通信協(xié)議于2011年被IETF定

    2024年02月08日
    瀏覽(22)
  • 開源流媒體服務(wù)器ZLMediaKit在Windows上運(yùn)行、配置、按需拉流拉取攝像頭rtsp視頻流)并使用http-flv網(wǎng)頁播放

    開源流媒體服務(wù)器ZLMediaKit在Windows上運(yùn)行、配置、按需拉流拉取攝像頭rtsp視頻流)并使用http-flv網(wǎng)頁播放

    目前市面上有很多開源的流媒體服務(wù)器解決方案,常見的有SRS、EasyDarwin、ZLMediaKit和Monibuca等。 1、SRS GitHub - ossrs/srs: SRS is a simple, high efficiency and realtime video server, supports RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH and GB28181. 2、EasyDarwin https://github.com/EasyDarwin/EasyDarwin 3、Monibuca Monibuca ·

    2023年04月16日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包