日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Janus流媒体服务器信令分析

發(fā)布時間:2024/4/11 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Janus流媒体服务器信令分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Janus流媒體服務(wù)器信令分析


目錄

  • 房間配置文件
  • API分類
  • Video Room房間管理
  • VideoRoom Publishers
  • VideoRoom Subscribers
  • video room文檔:https://janus.conf.meetecho.com/docs/videoroom.html


    1. 房間配置文件

    room-<unique room ID>: {# 房間描述description = This is my awesome room# 是否是私有房間,當(dāng)提出“l(fā)ist”請求時,私人房間不會出現(xiàn)is_private = true|false (private rooms don't appear when you do a 'list' request, default=false)# 密碼,操作房間時需要攜帶secret = <optional password needed for manipulating (e.g. destroying) the room># 密碼,加?房間時使?pin = <optional password needed for joining the room># 訂閱者是否需要提供?個有效的與發(fā)布者關(guān)聯(lián)的有效private_idrequire_pvtid = true|false (whether subscriptions are required to provide a valid private_idto associate with a publisher, default=false)# 房間內(nèi)最?的發(fā)布者數(shù)量publishers = <max number of concurrent senders> (e.g., 6 for a videoconference or 1 for a webinar, default=3)# 發(fā)送者最?的視頻?特率bitrate = <max video bitrate for senders> (e.g., 128000)bitrate_cap = <true|false, whether the above cap should act as a limit to dynamic bitrate changes by publishers, default=false>,# FIR指令fir_freq = <send a FIR to publishers every fir_freq seconds> (0=disable)# ?頻編碼器,從左到右的優(yōu)先級audiocodec = opus|g722|pcmu|pcma|isac32|isac16 (audio codec to force on publishers, default=opuscan be a comma separated list in order of preference, e.g., opus,pcmu)# 視頻編碼器,從左到右的優(yōu)先級videocodec = vp8|vp9|h264|av1|h265 (video codec to force on publishers, default=vp8can be a comma separated list in order of preference, e.g., vp9,vp8,h264)vp9_profile = VP9-specific profile to prefer (e.g., "2" for "profile-id=2")h264_profile = H.264-specific profile to prefer (e.g., "42e01f" for "profile-level-id=42e01f")# 是否使?內(nèi)置FECopus_fec = true|false (whether inband FEC must be negotiated; only works for Opus, default=false)# 是否?持編碼SVC模式,?前只?持VP9video_svc = true|false (whether SVC support must be enabled; only works for VP9, default=false)audiolevel_ext = true|false (whether the ssrc-audio-level RTP extension must benegotiated/used or not for new publishers, default=true)audiolevel_event = true|false (whether to emit event to other users or not, default=false)# 音頻級別的包數(shù)audio_active_packets = 100 (number of packets with audio level, default=100, 2 seconds)# ?頻?量基本平均值audio_level_average = 25 (average value of audio level, 127=muted, 0='too loud', default=25)videoorient_ext = true|false (whether the video-orientation RTP extension must benegotiated/used or not for new publishers, default=true)playoutdelay_ext = true|false (whether the playout-delay RTP extension must benegotiated/used or not for new publishers, default=true)transport_wide_cc_ext = true|false (whether the transport wide CC RTP extension must benegotiated/used or not for new publishers, default=true)# 是否錄制record = true|false (whether this room should be recorded, default=false)# 錄制?錄rec_dir = <folder where recordings should be stored, when enabled>lock_record = true|false (whether recording can only be started/stopped if the secretis provided, or using the global enable_recording request, default=false)# 當(dāng)新?加?時是否通知所有的參會者notify_joining = true|false (optional, whether to notify all participants when a newparticipant joins the room. The Videoroom plugin by design only notifiesnew feeds (publishers), and enabling this may result extra notificationtraffic. This flag is particularly useful when enabled with require_pvtidfor admin to manage listening only participants. default=false)# 是否使?端對端加密require_e2ee = true|false (whether all participants are required to publish and subscribeusing end-to-end media encryption, e.g., via Insertable Streams; default=false) }

    2. API分類

  • Video Room ?持不同的請求,?部分是同步請求,?部分是異步請求。
  • 1. 同步請求

  • 同步請求:直接在事務(wù)( transacation )的上下??獲取響應(yīng),即直接響應(yīng)( transaction 綁定即可)
  • create:動態(tài)創(chuàng)建?個新的房間,作為使?配置?件的替代?法
  • destroy:移除并銷毀房間,同時剔除房間?的所有?戶
  • edit:動態(tài)修改?些房間屬性
  • exists:查詢是否存在指定的房間
  • list:列出所有可?的房間
  • allowed:配置觀眾進(jìn)?房間權(quán)限
  • kick:管理員踢除?戶操作
  • listparticipants:列出所有指定房間中活躍(?如當(dāng)前正在發(fā)布)的參與者和他們的詳細(xì)信息
  • 2. 異步請求

  • 異步請求:在事件( event )通知中獲取成功( success )與失敗( failure )事件,先發(fā)?個ask后再發(fā)?個 event 進(jìn)?響應(yīng)(必須使? handle_id 綁定)
  • join:加?指定的房間,并指定連接?于發(fā)布或觀看?視頻
  • configure:修改?些參與者的設(shè)置,例如 bitrate cap
  • joinandconfigure:對于發(fā)布者,將前兩個請求合成?個
  • publish:開始發(fā)送媒體并?播給其他參與者
  • unpublish:停?發(fā)送媒體并?播給其他參與者
  • start:開始接收來?發(fā)布者的媒體數(shù)據(jù)
  • pause:停?傳遞媒體數(shù)據(jù)
  • switch:修改媒體連接的來源
  • leave:離開房間
  • 3. Video Room房間管理

    1. create-創(chuàng)建房間

    1. 請求body

    {"request" : "create","room" : <unique numeric ID, optional, chosen by plugin if missing>,"permanent" : <true|false, whether the room should be saved in the config file, default=false>,"description" : "<pretty name of the room, optional>","secret" : "<password required to edit/destroy the room, optional>","pin" : "<password required to join the room, optional>","is_private" : <true|false, whether the room should appear in a list request>,"allowed" : [ array of string tokens users can use to join this room, optional],... }
  • 更多房間創(chuàng)建參數(shù)可參考房間配置?件—— conf/janus.plugin.videoroom.jcfg
  • 請求都是以"request"為key,接著是命令,?如這?的"create"。
  • room:可選,唯?的房間ID,不提供時由video room插件?動?成;
  • permanent:可選,是否永久保存該房間;
  • secret: 可選,編輯/銷毀房間時?的密碼;
  • pin:可選,加?房間的密碼;
  • is_private:可選,是否是私有房間?如果是私有房間則不會出現(xiàn)在房間列表中;
  • allowed:可選,?戶加?房間的token數(shù)組;
  • 2. 成功響應(yīng)-created

    {"videoroom" : "created","room" : <unique numeric ID>,"permanent" : <true if saved to config file, false if not> }
  • 創(chuàng)建成功后返回房間ID
  • 如果你請求了?個永久房間但返回的是false,則很有可能是權(quán)限的問題。
  • 3. 失敗回調(diào) event

    {"videoroom" : "event","error_code" : <numeric ID, check Macros below>,"error" : "<error description as a string>" }
  • 默認(rèn)情況下,Janus 中所有?戶都可以創(chuàng)建房間,但我們可以在插件中配置 admin_key 來限制此功能,只有在 create 攜帶了正確的 admin_key 才可以創(chuàng)建成功。
  • 也可以選擇將此功能擴(kuò)展到RTP轉(zhuǎn)發(fā),以便只允許受信任的客戶端使?此功能。
  • 2. edit-編輯房間

  • 在房間被創(chuàng)建后,我們可以使? edit 編輯房間的屬性(例如 room description 、 secret 、 pin 、private or not ),但不能修改?些靜態(tài)的屬性(例如 room ID 、 sampling rate )。
  • 1. 請求body

    {"request" : "edit","room" : <unique numeric ID of the room to edit>,"secret" : "<room secret, mandatory if configured>","new_description" : "<new pretty name of the room, optional>","new_secret" : "<new password required to edit/destroy the room, optional>","new_pin" : "<new password required to join the room, optional>","new_is_private" : <true|false, whether the room should appear in a list request>,"new_require_pvtid" : <true|false, whether the room should require private_id from subscribers>,"new_bitrate" : <new bitrate cap to force on all publishers (except those with custom overrides)>,"new_fir_freq" : <new period for regular PLI keyframe requests to publishers>,"new_publishers" : <new cap on the number of concurrent active WebRTC publishers>,"new_lock_record" : <true|false, whether recording state can only be changed when providing the room secret>,"permanent" : <true|false, whether the room should be also removed from the config file, default=false> }
  • 創(chuàng)建房間完成后,ID是不可以修改的。
  • 2. 成功響應(yīng)-edited

    {"videoroom" : "edited","room" : <unique numeric ID> }

    3. destroy-銷毀房間

  • ?論是靜態(tài)還是動態(tài)的房間,都可以? destroy 進(jìn)?銷毀。
  • 1. 請求body

    {"request" : "destroy","room" : <unique numeric ID of the room to destroy>,"secret" : "<room secret, mandatory if configured>","permanent" : <true|false, whether the room should be also removed from the config file, default=false> }

    2. 成功響應(yīng)-destroyed

    {"videoroom" : "destroyed","room" : <unique numeric ID> }

    3. 房間用戶接收的事件-event

  • 當(dāng)房間被destroy時,其他所有參與者都會收到這個事件,獲知房間被銷毀
  • {"videoroom" : "destroyed","room" : <unique numeric ID of the destroyed room> }

    4. exist-房間是否存在

    1. 請求body

    {"request" : "exists","room" : <unique numeric ID of the room to check> }

    2. 成功響應(yīng)-success

    {"videoroom" : "success","room" : <unique numeric ID>,"exists" : <true|false> }

    5. allowd-出入管理

  • 可以配置是否檢查tokens,或者添加/刪除增加/刪除允許加?房間的?戶。
  • 1. 請求body

    {"request" : "allowed","secret" : "<room secret, mandatory if configured>","action" : "enable|disable|add|remove","room" : <unique numeric ID of the room to update>,"allowed" : [// Array of strings (tokens users might pass in "join", only for add|remove)] }

    2. 成功響應(yīng)-success

    {"videoroom" : "success","room" : <unique numeric ID>,"allowed" : [// Updated, complete, list of allowed tokens (only for enable|add|remove)] }

    6. kick-踢出房間

  • 房間的管理員可以通過 kick ?法將指定參與者踢出房間。注意,只是能將他踢出房間,并不能阻?他再次進(jìn)?。若想阻?他再次進(jìn)?,則需要使? allowed 對他進(jìn)?限制
  • 1. 請求body

    {"request" : "kick","secret" : "<room secret, mandatory if configured>","room" : <unique numeric ID of the room>,"id" : <unique numeric ID of the participant to kick> }

    2. 成功響應(yīng)-success

    {"videoroom" : "success", }

    7. list-房間列表

  • ?于展示公開的所有房間
  • 1. 請求body

    {"request" : "list" }

    2. 成功響應(yīng)-success

    {"videoroom" : "success","list" : [ // Array of room objects{ // Room #1"room" : <unique numeric ID>,"description" : "<Name of the room>","pin_required" : <true|false, whether a PIN is required to join this room>,"is_private" : <true|false, whether this room is 'private' (as in hidden) or not>,"max_publishers" : <how many publishers can actually publish via WebRTC at the same time>,"bitrate" : <bitrate cap that should be forced (via REMB) on all publishers by default>,"bitrate_cap" : <true|false, whether the above cap should act as a limit to dynamic bitrate changes by publishers (optional)>,"fir_freq" : <how often a keyframe request is sent via PLI/FIR to active publishers>,"require_pvtid": <true|false, whether subscriptions in this room require a private_id>,"require_e2ee": <true|false, whether end-to-end encrypted publishers are required>,"notify_joining": <true|false, whether an event is sent to notify all participants if a new participant joins the room>,"audiocodec" : "<comma separated list of allowed audio codecs>","videocodec" : "<comma separated list of allowed video codecs>","opus_fec": <true|false, whether inband FEC must be negotiated (note: only available for Opus) (optional)>,"video_svc": <true|false, whether SVC must be done for video (note: only available for VP9 right now) (optional)>,"record" : <true|false, whether the room is being recorded>,"rec_dir" : "<if recording, the path where the .mjr files are being saved>","lock_record" : <true|false, whether the room recording state can only be changed providing the secret>,"num_participants" : <count of the participants (publishers, active or not; not subscribers)>"audiolevel_ext": <true|false, whether the ssrc-audio-level extension must be negotiated or not for new publishers>,"audiolevel_event": <true|false, whether to emit event to other users about audiolevel>,"audio_active_packets": <amount of packets with audio level for checkup (optional, only if audiolevel_event is true)>,"audio_level_average": <average audio level (optional, only if audiolevel_event is true)>,"videoorient_ext": <true|false, whether the video-orientation extension must be negotiated or not for new publishers>,"playoutdelay_ext": <true|false, whether the playout-delay extension must be negotiated or not for new publishers>,"transport_wide_cc_ext": <true|false, whether the transport wide cc extension must be negotiated or not for new publishers>},// Other rooms] }

    8. listparticipants列出房間的參與者

  • 可以使?listparticipants列出房間的參與者。
  • 1. 請求body

    {"request" : "listparticipants","room" : <unique numeric ID of the room> }

    2. 成功響應(yīng)-participants

    {"videoroom" : "participants","room" : <unique numeric ID of the room>,"participants" : [ // Array of participant objects{ // Participant #1"id" : <unique numeric ID of the participant>,"display" : "<display name of the participant, if any; optional>","publisher" : "<true|false, whether user is an active publisher in the room>","talking" : <true|false, whether user is talking or not (only if audio levels are used)>},// Other participants] }

    4. VideoRoom Publishers

  • 發(fā)布者和訂閱者在房間?有不同的屬性。
  • 發(fā)布者 Publisher
  • 活躍的發(fā)布者 active publisher
  • 不活躍的發(fā)布者 passive publisher
  • 訂閱者 Subscriber
  • 在Video Room中,發(fā)布者(Publisher)是將多媒體數(shù)據(jù)發(fā)布在房間中的參與者,他們可以成為 feeds讓其他?戶進(jìn)?訂閱(subscribe)。
  • 1. join-加入房間

  • 可以通過 join 請求將指定的 handle 指定為 publisher 或 subscriber 。
  • 指定為 publisher :Janus 會將指定?戶添加到房間中的參與者列表( the list ofparticipants )中,此后,參與者可以接受到房間中關(guān)于 handle 的?系列通知(包括流的可?與移除)。
  • 指定為 subscriber :
  • 1. 請求body

    {"request" : "join","ptype" : "publisher","room" : <unique ID of the room to join>,"id" : <unique ID to register for the publisher; optional, will be chosen by the plugin if missing>,"display" : "<display name for the publisher; optional>","token" : "<invitation token, in case the room has an ACL; optional>" }

    2. 成功響應(yīng)-joined

  • 成功 join ?房間后,將會接收到當(dāng)前房間中活躍的 publishers 的列表。
  • {"videoroom" : "joined","room" : <room ID>,"description" : <description of the room, if available>,"id" : <unique ID of the participant>,"private_id" : <a different unique ID associated to the participant; meant to be private>,"publishers" : [{"id" : <unique ID of active publisher #1>,"display" : "<display name of active publisher #1, if any>","streams" : [{"type" : "<type of published stream #1 (audio|video|data)">,"mindex" : "<unique mindex of published stream #1>","mid" : "<unique mid of of published stream #1>","disabled" : <if true, it means this stream is currently inactive/disabled (and so codec, description, etc. will be missing)>,"codec" : "<codec used for published stream #1>","description" : "<text description of published stream #1, if any>","moderated" : <true if this stream audio has been moderated for this participant>,"simulcast" : "<true if published stream #1 uses simulcast (VP8 and H.264 only)>","svc" : "<true if published stream #1 uses SVC (VP9 only)>","talking" : <true|false, whether the publisher stream has audio activity or not (only if audio levels are used)>,},// Other streams, if any],"talking" : <true|false, whether the publisher is talking or not (only if audio levels are used); deprecated, use the stream specific ones>,},// Other active publishers],"attendees" : [ // Only present when notify_joining is set to TRUE for rooms{"id" : <unique ID of attendee #1>,"display" : "<display name of attendee #1, if any>"},// Other attendees] }
  • 當(dāng)房間配置了 notify_joining 為 TRUE 時,也會返回不推流的參與者。
  • private_id :該屬性?于訂閱,便于插件對其進(jìn)?關(guān)聯(lián)。
  • attendees:當(dāng)notify_joining=true時返回。
  • 3. 關(guān)于不活躍的發(fā)布者進(jìn)出通知

  • 不活躍的發(fā)布者加?房間不會通知其他參與者,因?yàn)?個?房間中可能會有很多參與者,如果每?個進(jìn)?離開都需要通知所有?的話會顯得太過于繁瑣。如果開發(fā)者它進(jìn)出房間也通知所有?,那么需要將房間的notify_joining 配置為 true 。通知的事件如下:
  • {"videoroom" : "event","room" : <room ID>,"joining" : {"id" : <unique ID of the new participant>,"display" : "<display name of the new participant, if any>"} }

    2. publish-發(fā)布

  • 發(fā)布者帶著 Offer 向 Janus 進(jìn)?協(xié)商
  • publish 請求必須攜帶著 JSEP SDP offer去協(xié)商?個新的 PeerConnection,即插件會檢查編碼器和碼率是否是房間所?持的,之后將會回應(yīng)?個 JSEP SDP answer 來關(guān)閉循環(huán)并完成配置?個PeerConnection。當(dāng)指定的 PeerConnection 搭建好后,該指定的 publisher 才會變成?個活躍的publisher,之后其他參與者才可以訂閱它。
  • 1. 請求body

    {"request" : "publish","audiocodec" : "<audio codec to prefer among the negotiated ones; optional>","videocodec" : "<video codec to prefer among the negotiated ones; optional>","bitrate" : <bitrate cap to return via REMB; optional, overrides the global room value if present>,"record" : <true|false, whether this publisher should be recorded or not; optional>,"filename" : "<if recording, the base path/file to use for the recording files; optional>","display" : "<new display name to use in the room; optional>","audio_level_average" : "<if provided, overrided the room audio_level_average for this user; optional>","audio_active_packets" : "<if provided, overrided the room audio_active_packets for this user; optional>","display" : "<new display name to use in the room; optional>","descriptions" : [ // Optional{"mid" : "<unique mid of a stream being published>","description" : "<text description of the stream (e.g., My front webcam)>"},// Other descriptions, if any]}
  • audio:是否轉(zhuǎn)發(fā)?頻;
  • video:是否轉(zhuǎn)發(fā)視頻;
  • data:是否轉(zhuǎn)發(fā)數(shù)據(jù);
  • 該請求和JSEP SDP offer?起提供,插件收到此消息后,將協(xié)商與之匹配的 JSEP SDP Answer 。
  • 2. 成功響應(yīng)-event

    {"videoroom" : "event","configured" : "ok" }

    3. configure-配置(開始發(fā)布)

  • publish 和 configure 在功能上時相同的,他們都有開始發(fā)布的功能。從語義上, publish 更加合適。但是 configure 可以更新發(fā)布者會話的某些屬性。總的來說 configure 的功能更加強(qiáng)?。
  • 1. 請求body

    {"request" : "configure","bitrate" : <bitrate cap to return via REMB; optional, overrides the global room value if present (unless bitrate_cap is set)>,"keyframe" : <true|false, whether we should send this publisher a keyframe request>,"record" : <true|false, whether this publisher should be recorded or not; optional>,"filename" : "<if recording, the base path/file to use for the recording files; optional>","display" : "<new display name to use in the room; optional>","audio_active_packets" : "<new audio_active_packets to overwrite in the room one; optional>","audio_level_average" : "<new audio_level_average to overwrite the room one; optional>","mid" : <mid of the m-line to refer to for this configure request; optional>,"send" : <true|false, depending on whether the media addressed by the above mid should be relayed or not; optional>,"descriptions" : [// Updated descriptions for the published streams; see "publish" for syntax; optional] }

    2. 成功響應(yīng)-event

    {"videoroom" : "event","configured" : "ok" }

    4. joinandconfigure-加入并配置(加入并且發(fā)布)

    1. 請求body

  • 參考join請求用的body,并攜帶 JSEP SDP offer
  • 2. 成功響應(yīng)-joined

  • 成功響應(yīng)將是?個 joined 事件,并且攜帶 JSEP SDP answer。
  • 5. 發(fā)布成功后推送

  • 當(dāng)?個?戶在房間中發(fā)布成功后,Janus 將會發(fā)送?個關(guān)于新對端的事件給所有參與者,事件如下:
  • {"videoroom" : "event","room" : <room ID>,"publishers" : [{"id" : <unique ID of the new publisher>,"display" : "<display name of the new publisher, if any>","streams" : [{"type" : "<type of published stream #1 (audio|video|data)">,"mindex" : "<unique mindex of published stream #1>","mid" : "<unique mid of of published stream #1>","disabled" : <if true, it means this stream is currently inactive/disabled (and so codec, description, etc. will be missing)>,"codec" : "<codec used for published stream #1>","description" : "<text description of published stream #1, if any>","moderated" : <true if this stream audio has been moderated for this participant>,"simulcast" : "<true if published stream #1 uses simulcast (VP8 and H.264 only)>","svc" : "<true if published stream #1 uses SVC (VP9 only)>","talking" : <true|false, whether the publisher stream has audio activity or not (only if audio levels are used)>,},// Other streams, if any],"talking" : <true|false, whether the publisher is talking or not (only if audio levels are used); deprecated, use the stream specific ones>,}] }

    6. unpublish-停止發(fā)布

  • unpublish 請求?于停?發(fā)布并且銷毀相關(guān)的 PeerConnection,并且將發(fā)布者從活躍流列表中移除。
  • 1. 請求body

    {"request" : "unpublish" }

    2. 成功響應(yīng)-event

    {"videoroom" : "event","unpublished" : "ok" }

    3. 其他成員通知

  • ?旦PeerConnections斷開,房間內(nèi)的其他參與者會通過下?這個通知得知此事
  • {"videoroom" : "event","room" : <room ID>,"unpublished" : <unique ID of the publisher who unpublished> }
  • 可以在同?個 handle 中多次發(fā)布和取消發(fā)布流
  • configure 基本上與 publish 的屬性相同。這就是為什么兩個請求都可以?來開始發(fā)布的原因。如果configure 成功,則返回 configured 事件,格式如下:
  • {"videoroom" : "event","configured" : "ok" }
  • 當(dāng)發(fā)送 configure 請求RTP擴(kuò)展 ssrc-audio-level 時,如果 audiolevel_event 設(shè)置為true ,則可能會向所有發(fā)布者發(fā)送?些臨時事件。這些事件將具有以下格式:
  • {"videoroom" : <"talking"|"stopped-talking", whether the publisher started or stopped talking>,"room" : <unique numeric ID of the room the publisher is in>,"id" : <unique numeric ID of the publisher>,"audio-level-dBov-avg" : <average value of audio level, 127=muted, 0='too loud'> }

    7. RTP轉(zhuǎn)發(fā)器

  • VideoRoom 插件的主要?的是從WebRTC源(發(fā)布者)獲取媒體,并將其轉(zhuǎn)發(fā)到WebRTC?的地(訂閱者),但實(shí)際上存在?種?案,可以將媒體轉(zhuǎn)發(fā)給外部(不?定與WebRTC兼容)組件。例如,?于媒體處理,外部錄制,轉(zhuǎn)碼,級聯(lián)等等。 rtp_forward 顧名思義,就是將發(fā)布者發(fā)送的RTP包(普通或加密)實(shí)時轉(zhuǎn)發(fā)到遠(yuǎn)程后端。
  • 可以使? rtp_forward 請求為現(xiàn)有發(fā)布者添加新的RTP轉(zhuǎn)發(fā)器,其格式如下:
  • {"request" : "rtp_forward","room" : <unique numeric ID of the room the publisher is in>,"publisher_id" : <unique numeric ID of the publisher to relay externally>,"host" : "<host address to forward the RTP and data packets to>","host_family" : "<ipv4|ipv6, if we need to resolve the host address to an IP; by default, whatever we get>","streams" : [{"mid" : "<mid of publisher stream to forward>","host" : "<host address to forward the packets to; optional, will use global one if missing>","host_family" : "<optional, will use global one if missing>","port" : <port to forward the packets to>,"ssrc" : <SSRC to use to use when forwarding; optional, and only for RTP streams, not data>,"pt" : <payload type to use when forwarding; optional, and only for RTP streams, not data>,"rtcp_port" : <port to contact to receive RTCP feedback from the recipient; optional, and only for RTP streams, not data>,"simulcast" : <true|false, set to true if the source is simulcast and you want the forwarder to act as a regular viewer (single stream being forwarded) or false otherwise (substreams forwarded separately); optional, default=false>,"port_2" : <if video and simulcasting, port to forward the packets from the second substream/layer to>,"ssrc_2" : <if video and simulcasting, SSRC to use to use the second substream/layer; optional>,"pt_2" : <if video and simulcasting, payload type to use the second substream/layer; optional>,"port_3" : <if video and simulcasting, port to forward the packets from the third substream/layer to>,"ssrc_3" : <if video and simulcasting, SSRC to use to use the third substream/layer; optional>,"pt_3" : <if video and simulcasting, payload type to use the third substream/layer; optional>,},{.. other streams, if needed..}],"srtp_suite" : <length of authentication tag (32 or 80); optional>,"srtp_crypto" : "<key to use as crypto (base64 encoded key as in SDES); optional>" }
  • 如果配置了admin_key屬性,則在請求中也需要提供它,否則未授權(quán)的請求將被拒絕。默認(rèn)情況下,沒有對rtp_forward進(jìn)?限制。
  • 如果請求成功則返回 rtp_forward 響應(yīng),其中格式如下:
  • {"videoroom" : "rtp_forward","room" : <unique numeric ID, same as request>,"publisher_id" : <unique numeric ID, same as request>,"forwarders" : [{"stream_id" : <unique numeric ID assigned to this forwarder, if any>,"type" : "<audio|video|data>","host" : "<host this forwarder is streaming to, same as request if not resolved>","port" : <port this forwarder is streaming to, same as request if configured>,"local_rtcp_port" : <local port this forwarder is using to get RTCP feedback, if any>,"remote_rtcp_port" : <remote port this forwarder is getting RTCP feedback from, if any>,"ssrc" : <SSRC this forwarder is using, same as request if configured>,"pt" : <payload type this forwarder is using, same as request if configured>,"substream" : <video substream this video forwarder is relaying, if any>,"srtp" : <true|false, whether the RTP stream is encrypted (not used for data)>},// Other forwarders, if configured] }
  • 要停?以前創(chuàng)建的RTP轉(zhuǎn)發(fā)器,可以使? stop_rtp_forward 請求,其格式如下:
  • {"request" : "stop_rtp_forward","room" : <unique numeric ID of the room the publisher is in>,"publisher_id" : <unique numeric ID of the publisher to update>,"stream_id" : <unique numeric ID of the RTP forwarder> }
  • 請求成功,則返回 stop_rtp_forward 響應(yīng):
  • {"videoroom" : "stop_rtp_forward","room" : <unique numeric ID, same as request>,"publisher_id" : <unique numeric ID, same as request>,"stream_id" : <unique numeric ID, same as request> }
  • 如果要獲取特定房間中所有轉(zhuǎn)發(fā)器的列表,可以使? listforwarders 請求,其格式如下:
  • {"request" : "listforwarders","room" : <unique numeric ID of the room>,"secret" : "<room secret; mandatory if configured>" }
  • 請求成功,則返回forwarders響應(yīng),其中包括RTP轉(zhuǎn)發(fā)器列表:
  • {"videoroom" : "forwarders","room" : <unique numeric ID of the room>,"publishers" : [ // Array of publishers with RTP forwarders{ // Publisher #1"publisher_id" : <unique numeric ID of publisher #1>,"forwarders" : [ // Array of RTP forwarders{ // RTP forwarder #1"stream_id" : <unique numeric ID assigned to this RTP forwarder, if any>,"type" : "<audio|video|data>","host" : "<host this forwarder is streaming to>","port" : <port this forwarder is streaming to>,"local_rtcp_port" : <local port this forwarder is using to get RTCP feedback, if any>,"remote_rtcp_port" : <remote port this forwarder getting RTCP feedback from, if any>,"ssrc" : <SSRC this forwarder is using, if any>,"pt" : <payload type this forwarder is using, if any>,"substream" : <video substream this video forwarder is relaying, if any>,"srtp" : <true|false, whether the RTP stream is encrypted>},// Other forwarders for this publisher],},// Other publishers] }
  • 在會議進(jìn)?期間啟?或禁?錄制,您可以使? enable_recording 請求,該請求的格式如下:
  • {"request" : "enable_recording","room" : <unique numeric ID of the room>,"secret" : "<room secret; mandatory if configured>""record" : <true|false, whether participants in this room should be automatically recorded or not>, }
  • 參與者通常也可以通過configure請求來更改??的錄制狀態(tài):這樣做是為了獲得最?的靈活性,可能希望單獨(dú)記錄?些流,?不是全局或?動記錄?些內(nèi)容,到特定?件。

  • 就是說,如果希望確保在啟?全局錄制后參與者不能停?其錄制,或者在不應(yīng)該錄制該會議室的情況下啟動它,那么您應(yīng)該確保在創(chuàng)建會議室時使?lock_record屬性,將其設(shè)置為true。這樣,只有在提供了房間密碼的情況下,才能更改錄制狀態(tài),從?確保只有管理員才能執(zhí)?此操作。

  • 最后,您可以使? leave 請求離開會議室。如果您是會議室中的活動發(fā)布者,這也將隱式取消你的發(fā)布。該leave請求如下所示

  • {"request" : "leave" }
  • 如果成功,響應(yīng)將如下所示:
  • {"videoroom" : "event","leaving" : "ok" }
  • 其他參與者將收到”leave”事件,格式如下:
  • {"videoroom" : "event","room" : <room ID>,"leaving : <unique ID of the participant who left> }
  • 如果是活躍的發(fā)布者,則其他?戶也將收到相應(yīng)的 unpublish 事件,以通知他們該流不再可?。如果只是潛伏?不是發(fā)布者,則其他參與者將僅收到”leave”事件。
  • 5. VideoRoom Subscribers

  • 在 VideoRoom 中,訂閱者(Subscriber)不是參與者,但是他可以準(zhǔn)確接收指定發(fā)布者的媒體數(shù)據(jù)。
  • 通常發(fā)布者發(fā)布了媒體后,訂閱者可以獲取該流進(jìn)?播放。當(dāng)發(fā)布者取消發(fā)布后,訂閱者 handle 也會隨之被移除。除?給訂閱者正確的信息,不然訂閱者是不能單獨(dú)存在的。
  • 1. join-加入房間

    1. 請求body

    {"request" : "join","ptype" : "subscriber","room" : <unique ID of the room to subscribe in>,"feed" : <unique ID of the publisher to subscribe to; mandatory>,"private_id" : <unique ID of the publisher that originated this request; optional, unless mandated by the room configuration>,"streams" : [{"feed" : <unique ID of publisher owning the stream to subscribe to>,"mid" : "<unique mid of the publisher stream to subscribe to; optional>"// Optionally, simulcast or SVC targets (defaults if missing)},// Other streams to subscribe to] }
  • 如果發(fā)布者對房間中的媒體進(jìn)?訂閱,則需要傳? private_id 。
  • 2. 成功響應(yīng)-attached(Offer)

  • 訂閱者成功加?房間并訂閱指定 feed 成功后,Janus 會給予?個 attached 響應(yīng),并且在這個 event中攜帶 JSEP SDP offer,?于進(jìn)?媒體協(xié)商。
  • {"videoroom" : "attached","room" : <room ID>,"streams" : [{"mindex" : <unique m-index of this stream>,"mid" : "<unique mid of this stream>","type" : "<type of this stream's media (audio|video|data)>","feed_id" : <unique ID of the publisher originating this stream>,"feed_mid" : "<unique mid of this publisher's stream>","feed_display" : "<display name of this publisher, if any>","send" : <true|false; whether we configured the stream to relay media>,"ready" : <true|false; whether this stream is ready to start sending media (will be false at the beginning)>},// Other streams in the subscription, if any] }

    2. start-開始訂閱(Answer 對 attached 的訂閱者響應(yīng))

  • 訂閱者接收到含有 attach 的 event 后,獲取??的 JSEP SDP offer 后,將其設(shè)置為遠(yuǎn)程 SDP 后,然后發(fā)送 start 請求并攜帶 JSEP SDP answer。
  • 1. 請求body

    {"request" : "start" }

    2. 成功響應(yīng)-event

    {"videoroom" : "event","started" : "ok" }
  • 當(dāng)訂閱者與Janus媒體協(xié)商完畢后,雙?就會建??條新的 WebRTC PeerConnection。在這之后,Streaming插件將會開始將媒體轉(zhuǎn)發(fā)到訂閱者端。
  • 3. pause-暫停訂閱

    1. 請求body

  • 以通過 pause 和 start 請求對訂閱媒體進(jìn)?臨時的暫停和恢復(fù),此處的 start 不需要攜帶 JSEP SDP answer
  • {"request" : "pause" }

    2. 成功響應(yīng)-event

    {"videoroom" : "event","paused" : "ok" }
  • ?于恢復(fù)的 start 其?法和上?是?致的,注意他不?攜帶 JSEP 即可。
  • 4. configure-配置

  • configure 請求允許動態(tài)修改訂閱者對于媒體訂閱的?些屬性,?如配置?頻和視頻的啟?與禁?,靈活設(shè)置訂閱內(nèi)容。
  • 1. 請求body

    {"request" : "configure","mid" : <mid of the m-line to refer to for this configure request; optional>,"send" : <true|false, depending on whether the mindex media should be relayed or not; optional>,"substream" : <substream to receive (0-2), in case simulcasting is enabled; optional>,"temporal" : <temporal layers to receive (0-2), in case simulcasting is enabled; optional>,"fallback" : <How much time (in us, default 250000) without receiving packets will make us drop to the substream below>,"spatial_layer" : <spatial layer to receive (0-2), in case VP9-SVC is enabled; optional>,"temporal_layer" : <temporal layers to receive (0-2), in case VP9-SVC is enabled; optional>,"audio_level_average" : "<if provided, overrides the room audio_level_average for this user; optional>","audio_active_packets" : "<if provided, overrides the room audio_active_packets for this user; optional>","restart" : <trigger an ICE restart; optional> }
  • audio 、 video 和 data :可以在媒體層( media-level )上進(jìn)?暫停與恢復(fù),對? pause 和start 直接作?所有?視頻流??,它更加靈活。
  • substream 和 temporal : The substream and temporal properties, instead, only make sense when the mountpoint is configured with video simulcasting support, and as such the viewer is interested in receiving a specific substream or temporal layer, rather than any other of the available ones.
  • spatial_layer 和 temporal_layer :The spatial_layer and temporal_layer have exactly the same meaning, but within the context of VP9-SVC publishers, and will have no effect on subscriptions associated to regular publishers.
  • 5. switch-切換

  • switch 適?于已經(jīng)與 Janus 成功建? PeerConnection 的訂閱者,通過這個請求完成訂閱的切換,就像看電視切換頻道?樣。這樣做的好處就是能復(fù)??條連接,在切換訂閱?標(biāo)的時候不需要重新建?連接,消耗不必要的資源。
  • 但是他也有以下的限制:
  • 不能只換?視頻流的其中?個,要都換
  • 兩個?標(biāo)發(fā)布者必須使??樣的配置,?如?樣的編碼器、?樣的數(shù)據(jù)格式(不?樣的話會導(dǎo)致延遲甚?直接?屏沒聲?)
  • 1. 請求body

    {"request" : "switch","streams" : [{"feed" : <unique ID of the publisher the new source is from>,"mid" : "<unique mid of the source we want to switch to>","sub_mid" : "<unique mid of the stream we want to pipe the new source to>"},{// Other updates, if any}] }

    2. 成功響應(yīng)-event

    {"videoroom" : "event","switched" : "ok","room" : <room ID>,"changes" : <number of successful changes (may be smaller than the size of the streams array provided in the request)>,"streams" : [// Current configuration of the subscription, same format as when subscribing// Will contain info on all streams, not only those that have been updated] }

    6. leave-離開房間

  • leave 請求?于停?訂閱并銷毀相關(guān)的 PeerConnection,由于上下?是隱式的,所以不需要其他參數(shù)
  • 1. 請求body

    {"request" : "leave" }

    2. 成功響應(yīng)-event

    {"videoroom" : "event","left" : "ok", }

    總結(jié)

    以上是生活随笔為你收集整理的Janus流媒体服务器信令分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    91视频免费网站 | 中文字幕高清在线 | 亚洲国产综合在线 | 国产一区二区久久久久 | 91x色| 午夜免费视频网站 | 亚洲午夜精品一区二区三区电影院 | 美女视频一区二区 | 天堂中文在线视频 | 综合五月| 国产成人一区二 | 日韩欧美在线不卡 | 久久久久夜色 | 久久久 精品 | 午夜成人免费影院 | 久久草网站 | 在线观看av中文字幕 | 亚洲一区日韩精品 | 日韩网站在线免费观看 | 欧美一级片免费观看 | 日韩视频 一区 | 国产一级二级视频 | 欧美日韩精品久久久 | 丝袜美腿在线播放 | 精品亚洲免费 | 丁香六月色 | 久久精品视频在线免费观看 | a√天堂中文在线 | av三级av | 久久久91精品国产一区二区三区 | 国产精品成人aaaaa网站 | 久久亚洲国产精品 | 天天干天天射天天操 | 国产18精品乱码免费看 | 天堂av在线中文在线 | 亚洲国产影院av久久久久 | 国产精品久久久久久欧美 | 国产精品区二区三区日本 | 日韩黄色大片在线观看 | 日本xxxxav| 亚洲欧美日韩精品一区二区 | 国产精品欧美久久久久三级 | 日韩欧美极品 | 黄色三级在线看 | 日韩综合一区二区 | 探花视频在线观看+在线播放 | 免费久久久久久 | 国产又粗又猛又爽 | 少妇搡bbb | 色多多在线观看 | 97色婷婷成人综合在线观看 | 99热这里只有精品8 久久综合毛片 | 深夜免费小视频 | 美女久久精品 | 91免费观看网站 | 日韩精品专区在线影院重磅 | 婷婷丁香av | 成人91在线| 日本天天操 | 成年人视频免费在线 | 操操操操网 | 中文字幕中文字幕在线中文字幕三区 | 在线播放视频一区 | 美女久久久久久久久久久 | 一区二区精品在线观看 | 在线视频福利 | 久久久国产99久久国产一 | 亚洲综合涩 | 日韩精品无码一区二区三区 | 日韩福利在线观看 | av成人在线看 | 五月激情久久 | 亚洲黄色免费电影 | 最近中文字幕完整视频高清1 | 欧美黑人性爽 | 免费日韩一区二区三区 | 98精品国产自产在线观看 | 日精品| 日本久久中文 | 97超碰在线久草超碰在线观看 | 久久精品站 | 97精品欧美91久久久久久 | 国产一区成人 | www.com久久久 | 欧美一区二区精品在线 | 国产v亚洲v | 国产欧美高清 | 欧美国产日韩在线视频 | 91精品国产高清自在线观看 | 一区二区视频在线观看免费 | 亚洲精品在线观 | 波多野结衣电影一区二区 | 精品一二区 | 在线观看视频日韩 | 91精品国产福利在线观看 | 在线三级中文 | 91在线视频免费播放 | 在线看片日韩 | 91av电影| 免费黄色av | 色视频在线免费 | 成年人在线免费看视频 | 国产福利精品在线观看 | 久草亚洲视频 | 亚洲欧美婷婷六月色综合 | 亚洲免费公开视频 | 在线看v片成人 | 久久精品这里热有精品 | 国产成人在线综合 | 久久久www成人免费毛片麻豆 | 黄色三级网站在线观看 | 国产一级二级三级视频 | 亚洲精品h | 丁香五月亚洲综合在线 | 国产一区二区三区久久久 | 九九热久久久 | 欧美日韩精品影院 | 色吊丝在线永久观看最新版本 | 久久国产综合视频 | 永久免费精品视频 | 丁香婷婷色月天 | 国产一级在线观看 | 天天操天天爱天天干 | 欧美一级欧美一级 | 91丨九色丨丝袜 | 伊人开心激情 | 激情五月伊人 | 国产精品手机在线观看 | 中文字幕av一区二区三区四区 | 久久视频一区二区 | 最近更新好看的中文字幕 | 99精品视频免费观看 | 久久国产免费看 | 四虎在线免费视频 | 国产乱码精品一区二区三区介绍 | 色网站在线免费观看 | 99免费在线观看视频 | 国产日韩精品一区二区三区 | 亚洲黄色免费网站 | 久色小说 | 欧美一区二区三区不卡 | av不卡网站| 51久久夜色精品国产麻豆 | 全黄网站 | 久久视频在线观看免费 | 亚洲三级在线免费观看 | 欧美a视频在线观看 | 国产美女无遮挡永久免费 | 亚洲精品久久久久久中文传媒 | 亚洲 欧美 另类人妖 | www.com久久久| 国产精品免费看久久久8精臀av | 正在播放一区 | 91精品视频观看 | 日韩电影在线观看一区 | 国产69久久精品成人看 | 久草在线在线视频 | 手机av资源 | 91av超碰| 中文字幕在线播放视频 | 西西www4444大胆在线 | 欧美色综合 | 久久精品久久久精品美女 | 91久久精品一区二区二区 | 国产亚洲精品免费 | 2023亚洲精品国偷拍自产在线 | 亚洲国产一区在线观看 | 97碰碰精品嫩模在线播放 | avhd高清在线谜片 | 97免费在线观看视频 | 久草在线视频在线 | 免费观看一级一片 | 天天色天天综合 | 日韩欧美视频二区 | 中文字幕一区二区三区四区 | 日韩在线免费观看视频 | 国产精品k频道 | 精品国产免费看 | 在线国产中文 | 精品国产电影 | 五月婷婷在线观看视频 | 成人久久18免费网站图片 | 欧美吞精 | 在线 国产 亚洲 欧美 | 国外av在线| 黄色成人av在线 | 福利视频午夜 | 在线免费高清一区二区三区 | 伊人宗合网 | 成人免费视频在线观看 | 欧美视频不卡 | 国产一区不卡在线 | 国产精品1区2区 | 日韩欧美一级二级 | 黄色avwww| 99久热在线精品视频成人一区 | 狠狠狠色丁香综合久久天下网 | 国产中文字幕在线免费观看 | 免费看的黄色网 | 18国产精品福利片久久婷 | 久久久福利视频 | 粉嫩aⅴ一区二区三区 | 国产伦理久久精品久久久久_ | 6080yy午夜一二三区久久 | 国产va在线 | 99视频国产精品免费观看 | 91亚洲在线 | 91污污 | 国内精品久久久久久久久久清纯 | 97国产精品 | 成人黄色中文字幕 | x99av成人免费 | 亚洲日韩中文字幕在线播放 | 国产成人三级一区二区在线观看一 | 国产理论在线 | 久久综合久久久久88 | 国产免费又黄又爽 | 麻豆你懂的 | 久久久久久电影 | 2019天天干天天色 | 亚洲天堂色婷婷 | 丁香婷婷综合激情 | 人人模人人爽 | 9999激情| 日批网站免费观看 | 水蜜桃亚洲一二三四在线 | 久草视频免费在线播放 | 最近日本韩国中文字幕 | 中文网丁香综合网 | 午夜在线国产 | 国产 视频 高清 免费 | 激情五月婷婷网 | 日韩手机在线 | 91av视频在线免费观看 | 午夜视频在线观看一区二区三区 | 一级黄色免费网站 | 日韩区在线观看 | 最新午夜电影 | 国产精品久久艹 | 日本精品免费看 | 精品国产91亚洲一区二区三区www | 日韩国产欧美在线播放 | 欧美国产日韩在线视频 | 久久再线视频 | 国产成人精品久久二区二区 | 久久精品99国产精品亚洲最刺激 | 五月婷婷影院 | 亚洲精品综合久久 | 青青久视频 | 国产又粗又硬又爽的视频 | 成人av免费播放 | 色婷婷综合久久久久中文字幕1 | 91女神的呻吟细腰翘臀美女 | 久久精品国产成人精品 | 在线观看精品视频 | 麻豆视频在线免费看 | 国内精品美女在线观看 | 国产中文字幕亚洲 | 亚洲精品国产高清 | 国产九色视频在线观看 | 丰满少妇久久久 | 亚洲理论片在线观看 | 免费特级黄色片 | 九九热免费在线观看 | 久久久久久久久久伊人 | 免费网址在线播放 | 国产精品久久久久一区二区三区 | www.久草.com| 一区二区三区四区免费视频 | 在线电影日韩 | 91精品国产电影 | 99久久精品国产观看 | 日韩免费不卡视频 | 日韩一区二区三区高清免费看看 | 日韩免费电影一区二区三区 | 日本黄色免费电影网站 | 激情黄色一级片 | 天天射天天操天天色 | 麻豆视频入口 | aaa亚洲精品一二三区 | 婷婷九月丁香 | 午夜精品电影 | 在线观看亚洲免费视频 | 97福利在线| 黄网站免费看 | 操操操日日日干干干 | 欧美日韩有码 | 麻豆国产精品视频 | 九九久久久久久久久激情 | 国产精品久久久久久久久婷婷 | 国产小视频免费在线网址 | 高清国产一区 | 国产在线高清精品 | 久久久免费在线观看 | 91香蕉视频污在线 | 91精品在线视频观看 | 在线观看免费国产小视频 | 成人欧美一区二区三区黑人麻豆 | 日韩成人av在线 | 日韩字幕在线观看 | 久99久在线视频 | 99久久婷婷国产 | 狠色狠色综合久久 | 国产精品成人av久久 | 久久久久9999亚洲精品 | 日韩午夜视频在线观看 | 最新国产精品久久精品 | 国产精品久久免费看 | 国产精品系列在线 | 综合激情av | 欧美动漫一区二区三区 | 日本黄色免费播放 | 久久久久成人精品 | 亚洲天堂网站 | 免费观看视频黄 | 夜夜骑日日 | 人成在线免费视频 | 日韩在线免费小视频 | 在线观看成人网 | 深爱五月激情五月 | 又污又黄网站 | 麻豆成人网 | 日本精品免费看 | 日本中文字幕视频 | 99精品一区二区三区 | 国产精品一区二区精品视频免费看 | 国产一区二区精 | 久久国产精品系列 | 亚洲一级久久 | 免费观看成人网 | 2021国产精品 | 国内视频1区| 日韩精品免费一区二区在线观看 | 日本中文一区二区 | 亚洲精品xx | 超碰成人网 | 夜夜躁日日躁狠狠躁 | 日韩在线视频看看 | 久久五月网 | 国产精品1区2区 | 在线岛国av | 在线91精品 | 免费情缘 | 99免费在线 | 欧美日韩69 | 成人欧美亚洲 | 人人爽人人乐 | 久久精品2 | 深爱激情亚洲 | 国产录像在线观看 | 97精品国产91久久久久久 | www.久久爱.cn| 国产91粉嫩白浆在线观看 | 中文字幕在线有码 | 日韩一区二区三区视频在线 | 超碰在线97国产 | 国产黄色视 | 久久综合福利 | 九九有精品| 欧美日韩国产色综合一二三四 | 中文在线中文a | 91av播放| 中文字幕九九 | 久草在在线视频 | 久久电影日韩 | 日b黄色片| 天天爽人人爽夜夜爽 | 精品99在线视频 | 国产一区91 | 亚洲精品久久久久www | a v在线观看 | 在线国产日本 | av免费在线看网站 | 日韩视频在线不卡 | 午夜精品av在线 | 成人午夜电影在线 | 国产福利精品在线观看 | 丰满少妇麻豆av | 18国产精品福利片久久婷 | 亚洲精品九九 | 黄色成人影院 | 在线观看91精品视频 | 最近中文字幕大全 | 99视频网站 | 黄色网址国产 | 麻豆高清免费国产一区 | 美女免费网站 | 国产精品久久久久久久久久久久午夜片 | 国产成人精品久久二区二区 | 日日爱999| 久草国产精品 | 免费a视频在线观看 | 成人免费在线观看av | 中文字幕最新精品 | 亚洲成av人片在线观看无 | 国产精品二区在线 | 久久免费公开视频 | 成人毛片100免费观看 | 欧美精品久久久久久久久久丰满 | 中文字幕资源在线观看 | 日本不卡久久 | 婷婷久久一区 | 色视频网站免费观看 | 久久久免费高清视频 | 偷拍福利视频一区二区三区 | 免费黄色网址网站 | 国产一区在线视频观看 | 久草视频免费在线观看 | av成人资源 | 亚洲精品久久久蜜桃直播 | 久久精品91视频 | 日韩在线播放视频 | 国产精品久久久久久久久久久久午夜片 | 激情婷婷综合网 | 精品国产久| 亚洲精品欧美视频 | 一区二区三区精品在线视频 | 在线亚洲精品 | 国产资源在线免费观看 | 午夜婷婷综合 | 中文字幕高清视频 | 亚洲精品国精品久久99热一 | 亚洲国产精品影院 | 国产婷婷在线观看 | 免费高清在线观看电视网站 | 国产成人免费av电影 | 字幕网在线观看 | 国产18精品乱码免费看 | 日本中文字幕在线观看 | 天天色天天艹 | 狠狠色噜噜狠狠 | 国产精品视频免费观看 | 亚洲精品视频在线看 | 国产黄色免费电影 | 成人蜜桃视频 | 国产欧美精品一区二区三区四区 | 精品久久一区 | 久久久久久在线观看 | 久久综合九色 | 丁香九月激情综合 | 久久综合九色综合久99 | 国产aaa大片 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 97在线观看| 成人动漫视频在线 | 国产午夜免费视频 | 国产精品精品久久久久久 | 久久调教视频 | 国产精品亚洲人在线观看 | 国产69精品久久久久99尤 | 亚洲第一香蕉视频 | 伊人www22综合色| 天天爽天天爽天天爽 | 超碰在线观看av | 女人18毛片a级毛片一区二区 | 亚洲乱码精品久久久久 | 午夜在线免费视频 | 亚洲国产日韩欧美在线 | 97超碰香蕉| 久久午夜精品 | 91视频高清完整版 | 欧美日韩精品免费观看 | 在线va网站| 鲁一鲁影院 | 中国成人一区 | 免费色视频网址 | 国产精品一区二区免费在线观看 | 免费看污黄网站 | 91视频免费 | 久久久久夜色 | 中字幕视频在线永久在线观看免费 | 天天狠狠操 | 91视频免费 | 国产精品mv在线观看 | 成人a在线观看高清电影 | 久久视频这里有久久精品视频11 | 国产经典 欧美精品 | 国产三级香港三韩国三级 | 天天色天天射天天综合网 | 97视频精品 | 91九色综合 | 伊人久操| 在线视频一区二区 | 五月婷婷亚洲 | 国产精品白丝jk白祙 | 亚洲欧美日韩国产精品一区午夜 | 国产91学生粉嫩喷水 | 亚洲欧美视频网站 | 久久伊人五月天 | 国产精华国产精品 | 国产传媒中文字幕 | 亚洲精品在线免费观看视频 | 五月的婷婷 | 国产最新在线 | 欧美一二三专区 | 91麻豆免费版 | 色婷婷午夜 | 精品女同一区二区三区在线观看 | 天天干天天看 | 国产精品福利无圣光在线一区 | 免费国产在线观看 | 国产成人福利在线观看 | 狠狠躁日日躁狂躁夜夜躁 | 天天干天天射天天操 | 日韩国产高清在线 | 精品国产一区二区三区在线观看 | 日韩欧美99| av理论电影| 久久久片 | 国产一区久久 | 99在线视频观看 | 81精品国产乱码久久久久久 | 久久久国产一区二区三区 | 999久久国产| 久久任你操 | 午夜在线国产 | 玖玖视频在线 | 88av视频| 免费看片网址 | 日本中文在线观看 | 亚洲资源网 | 国产日韩欧美在线观看 | 三级在线视频观看 | 9999在线观看 | 一区二区在线影院 | 成年人黄色免费看 | 成人影片在线播放 | 日本黄色大片免费看 | www免费视频com| av中文字幕网站 | 四季av综合网站 | 伊人色综合久久天天 | 亚洲精品免费视频 | 免费网址在线播放 | 成人黄色在线电影 | 人人爱人人舔 | 国产在线观看91 | 久久久精品成人 | 精品久久久久久久久久久久久久久久久久 | 亚洲午夜精品一区 | 成人免费观看完整版电影 | 国产成人精品一二三区 | 国产成人精品在线播放 | 麻豆91精品视频 | 成人免费观看视频网站 | 国产精在线 | 中文字幕激情 | 国产在线中文字幕 | 日本久久久久久久久久 | 97在线影院 | 中文在线亚洲 | 丁香在线视频 | 亚洲一区二区三区四区精品 | 中文字幕免费观看全部电影 | 欧美伦理一区二区三区 | 色a资源在线 | 中文资源在线播放 | 亚洲成av人片在线观看无 | 欧美日韩91| 日韩精品欧美专区 | 婷婷色综 | 在线免费观看的av网站 | av一级二级 | 亚洲1区在线 | 国产精品二区在线观看 | 日韩亚洲在线观看 | 久久精品毛片基地 | 美女网站视频久久 | www.色的| 狠狠做深爱婷婷综合一区 | 中文在线字幕免费观 | 国产精品福利午夜在线观看 | 亚洲毛片久久 | 久综合网| 毛片的网址| 在线中文字幕电影 | 香蕉久久久久久久 | 国产高清不卡av | 久久久久亚洲精品男人的天堂 | 国产精品igao视频网入口 | 中文字幕日韩伦理 | 久久夜夜爽 | 国产婷婷精品av在线 | 在线免费观看黄色 | 久久国产精品免费视频 | 精品国产精品国产偷麻豆 | 国产免费一区二区三区最新6 | av网站大全免费 | 国产精品亚洲综合久久 | 国产视频在线观看一区二区 | 97手机电影网 | 久久黄色免费观看 | 91精品久久久久久 | 久久99精品国产99久久 | 在线视频婷婷 | 婷婷丁香在线 | 久久久久久久99精品免费观看 | 99re亚洲国产精品 | 日韩成人在线一区二区 | 欧美日韩精| 国产成人在线免费观看 | 久久人91精品久久久久久不卡 | 久久国产视频网 | 92国产精品久久久久首页 | 国产看片网站 | 狠狠的操狠狠的干 | 中日韩免费视频 | 久久婷婷色 | 国产精品成久久久久三级 | 中文字幕亚洲情99在线 | 亚洲人成人在线 | 日韩精品免费在线播放 | 欧美aa级 | 五月婷婷,六月丁香 | 人人网人人爽 | 日韩成人高清在线 | 五月天婷婷视频 | 私人av| 成人久久久精品国产乱码一区二区 | 国产视频高清 | 激情影院在线 | 欧美精品一区二区在线观看 | 中文字幕在线免费看线人 | 99热精品在线 | 婷婷色网站 | 在线观看精品黄av片免费 | 99久久成人 | 婷婷色在线 | 日韩欧美视频 | 一区二区三区国产精品 | 久久看视频 | 美女免费网站 | 成人h在线观看 | 91探花在线视频 | 日韩大陆欧美高清视频区 | 国产精品久久一区二区无卡 | 69久久夜色精品国产69 | 亚洲精品视频二区 | 99免在线观看免费视频高清 | 激情小说 五月 | 成人av电影在线观看 | 一级黄色免费 | 狠狠色丁香久久婷婷综合五月 | 国产亚洲欧洲 | 在线播放 一区 | 亚洲国产精品成人精品 | 久久免费高清 | 狠狠网| 96国产精品视频 | 欧美一级爽 | 激情电影在线观看 | 九九精品视频在线看 | 在线观看亚洲电影 | 美女视频免费精品 | 久久精品亚洲一区二区三区观看模式 | 亚洲一级片免费观看 | 人人爽人人爽人人爽学生一级 | 91人人干| 91久久在线观看 | 久久久亚洲精华液 | 国产一级淫片免费看 | 久久成人免费 | 91视频在线免费看 | 麻豆视频免费网站 | 久久久国产一区二区三区四区小说 | 成人免费观看完整版电影 | 久 久久影院 | 日韩电影一区二区三区 | 色天堂在线视频 | 99视频精品 | 国产最新91 | 久久精品视频2 | 日韩精品亚洲专区在线观看 | 操高跟美女| 亚洲日本va在线观看 | 少妇自拍av| 亚洲综合网站在线观看 | 激情久久伊人 | 国产色资源| 欧美日韩国产一区二区三区在线观看 | 色综合久久悠悠 | 97视频在线免费播放 | 看片网站黄 | 免费三级大片 | 久久综合婷婷国产二区高清 | 亚洲精品在线视频网站 | 一区二区三区在线电影 | 欧洲精品亚洲精品 | 一区二区三区高清不卡 | 国产精品精品久久久 | 色婷婷www| av在线官网 | 亚洲综合激情 | 丁香婷婷综合激情 | 国产精品久久久久久久久久久免费 | 国产精品久久久久四虎 | 国产电影黄色av | 国产无吗一区二区三区在线欢 | 一级做a视频 | 免费欧美精品 | 香蕉影视在线观看 | 久久www免费人成看片高清 | 精品国产免费观看 | 久久九九国产精品 | 青青河边草免费直播 | 亚洲精品免费在线 | 国产精品精品 | 一区二区三区在线视频111 | 在线看片一区 | 99热在线这里只有精品 | 91视频黄色 | 欧美91精品久久久久国产性生爱 | .国产精品成人自产拍在线观看6 | 国产中文字幕视频在线 | 伊人一级| 91久久奴性调教 | 99 色| 久久永久免费 | 国产色视频123区 | 欧美视频18 | 午夜视频在线观看一区二区 | 探花视频在线观看免费 | 欧美日韩精品在线免费观看 | 欧美精彩视频在线观看 | 视频福利在线观看 | 91av手机在线 | 久久久久在线视频 | 黄色大片免费播放 | japanesexxxhd奶水| 亚洲精品国产高清 | 91亚洲精品在线观看 | 九九免费在线观看视频 | 91专区在线观看 | 日本黄色一级电影 | 久久久久成人精品免费播放动漫 | 天天躁日日躁狠狠躁av中文 | 国产韩国日本高清视频 | 免费观看www小视频的软件 | 国产精品久久久久久久久久了 | 久久视频免费在线观看 | 日本精品在线 | 久久久国产成人 | 久久精品视频在线观看免费 | 日韩av区 | 天天爽夜夜爽人人爽一区二区 | 国产视频精品久久 | 成人资源网| 热久久在线视频 | www91在线| 在线观看免费av片 | 黄色免费av | 99性视频| 国内成人综合 | www.色国产 | 国产一及片 | 毛片激情永久免费 | 久久高清毛片 | 美女免费黄网站 | 日韩欧美在线高清 | 精品在线看| 五月天激情综合网 | a在线观看国产 | 久久久精品在线观看 | 精品电影一区 | 有码中文字幕 | 久久情爱 | 久久久久久久久爱 | 欧美经典久久 | 911久久| 久久久国产在线视频 | 久久婷婷色综合 | 欧美黑人巨大xxxxx | 亚洲婷婷免费 | 国产精品久久久久久电影 | 亚洲精品9 | 日韩av影视在线 | 久久久久久激情 | 亚洲精品xxx | 在线播放日韩av | 国产资源在线观看 | 91中文字幕在线 | 不卡视频一区二区三区 | 欧美成人播放 | 久久伊人热 | 国产成人免费 | 色婷婷色| 黄色91免费观看 | 国产色婷婷精品综合在线手机播放 | 久精品视频在线 | 国产区在线视频 | 中文字幕在线观看免费高清电影 | 波多野结依在线观看 | 免费观看性生活大片3 | 免费在线观看午夜视频 | 最新av在线播放 | 国产精品免费人成网站 | 97视频网址 | 色姑娘综合 | 99在线免费观看视频 | 91片在线观看 | 超碰在线观看99 | 国产美女主播精品一区二区三区 | 国产黄色片久久 | 国产精品视频永久免费播放 | 亚洲欧洲日韩在线观看 | 国产精品黄网站在线观看 | 992tv人人草| 日韩理论片中文字幕 | 亚洲成人资源 | 精品久久久久久亚洲综合网 | 精品免费国产一区二区三区四区 | 国产亚洲综合精品 | 国产久草在线观看 | 米奇影视7777 | 日韩av在线免费看 | 久久综合婷婷国产二区高清 | 亚洲精品自拍视频在线观看 | 欧美日在线 | 丁香婷婷成人 | 久久9视频| 亚洲另类视频 | 亚洲春色综合另类校园电影 | 欧美精品免费在线 | www.精选视频.com | 久一网站 | 国产精品一区二区三区在线播放 | 中文av资源站 | 黄色三级视频片 | 精品久久一区二区三区 | 91精品在线免费 | 国产麻豆剧传媒免费观看 | 91精品久久久久久综合乱菊 | 91网在线 | 在线韩国电影免费观影完整版 | 欧美最新大片在线看 | 亚洲影音先锋 | 久久久精品一区二区三区 | 精品国内 | 久久精品国产亚洲 | 99久久久国产精品免费99 | 中文字幕一区二区在线播放 | 国产色婷婷在线 | 国产我不卡 | 午夜精品一区二区三区在线播放 | 亚洲香蕉视频 | 九九免费观看全部免费视频 | 日韩久久精品一区二区三区下载 | 波多野结衣在线观看一区二区三区 | 国产在线小视频 | 91久久在线观看 | 午夜电影 电影 | 国产在线色视频 | 六月丁香激情综合色啪小说 | 婷婷在线看 | zzijzzij日本成熟少妇 | 成年人免费看的视频 | 国产久草在线 | 91一区二区三区久久久久国产乱 | 91黄视频在线观看 | 六月婷婷网 | 国产精品18久久久久久久久久久久 | 51久久夜色精品国产麻豆 | 91精品办公室少妇高潮对白 | 成年人在线免费看视频 | 久久8| 精品国产一区二区三区噜噜噜 | 天天色综合1 | 久草视频一区 | 中文字幕在线国产精品 | 免费在线黄| 精品国产午夜 | 91精品一区二区在线观看 | 国产精品视频不卡 | 国产亚洲午夜高清国产拍精品 | 国产美女被啪进深处喷白浆视频 | 日韩欧美精品一区二区三区经典 | 美女黄频在线观看 | 深夜免费福利 | 久久伦理电影网 | 久久久午夜精品理论片中文字幕 | 在线韩国电影免费观影完整版 | 亚洲精品美女久久 | 在线观看精品国产 | 美女久久久久 | 久草视频网| 中文字幕一区av | 国产中文字幕一区二区 | 亚洲精品国产精品国自产 | 综合网av| 国产成人精品国内自产拍免费看 | 91在线视频免费播放 | 国产一区二区在线影院 | www.婷婷色 | 日本不卡123区 | 91九色免费视频 | 91中文字幕 | 999日韩| 91黄色在线视频 | 欧美日韩观看 | 久久99在线观看 | 免费看一级| 久久er99热精品一区二区 | 国产资源在线免费观看 | 国产亚洲日 | 国产无套一区二区三区久久 | 免费av片在线 | 精品毛片久久久久久 | 日韩高清一区 | 日韩精品一区电影 | 97香蕉久久超级碰碰高清版 | 正在播放国产一区 | 久草精品国产 | 超碰久热 | 日韩精品无 | 激情文学综合丁香 | 色婷婷狠狠五月综合天色拍 | 高清不卡免费视频 | 激情视频综合网 | 久久er99热精品一区二区 | www在线观看视频 | 免费视频黄 | 麻豆91在线观看 | 久久公开视频 | 91正在播放| 91大神一区二区三区 | 久久久久久国产精品久久 | 一区二区三区在线免费 | 久久这里只有精品首页 | 天天射狠狠干 | 精品视频免费播放 | 中文字幕在线播出 | 一级c片| 999国产精品视频 | 最新av电影网址 | 国产日韩精品一区二区三区在线 | 999热视频 | 国产午夜三级一区二区三桃花影视 | 日日干天天爽 | 在线观看日韩视频 | 91色在线观看视频 | 91九色精品女同系列 | 天天干天天操av | 中文字幕888 | 在线观看资源 | 国产成人免费av电影 | 日韩免费视频一区二区 | 久草线 | 国产三级精品三级在线观看 | 在线观看完整版 | 午夜美女福利直播 | 免费精品在线 | 极品国产91在线网站 | 超级碰视频 | 97超碰免费| 亚洲欧洲成人精品av97 | 91看片在线| 色婷婷综合久色 | 丝袜网站在线观看 | 国产精品久久麻豆 | 精品av在线播放 | 五月婷婷欧美 | 日韩欧美一区二区三区免费观看 | 国产h在线观看 | 国产剧情一区二区在线观看 | 成人av一区二区兰花在线播放 | 97超碰成人在线 | 久久久久久欧美二区电影网 | 国产精品k频道 | 97涩涩视频 | 天天干天天拍天天操 | 成 人 黄 色 视频 免费观看 | 最新动作电影 | 亚洲 欧洲 国产 精品 | 人人爱人人舔 | 在线免费视 | 九热在线| 五月婷婷六月丁香 | 久久99国产综合精品 | 亚洲久草网 | 国产午夜精品视频 | 国产精品门事件 | 一区二区中文字幕在线 | 国产精品综合av一区二区国产馆 | adc在线观看| 国产丝袜美腿在线 | 九九爱免费视频在线观看 | 久久免费成人精品视频 | 国产96在线观看 | 色偷偷人人澡久久超碰69 | 国产精品久久久99 | 久久精品视频播放 | 久久九九久久九九 | 国产一区二区在线免费播放 | 国产午夜在线 | 国产专区在线看 | www.狠狠色 | 久久亚洲精品电影 | 精品91在线 |