2

AFAIK chromecast 不支持 RTP,但是当我将我的一加一连接到 chromecast 时,我得到了以下日志,那么它是如何投射的?

09-15 16:07:37.648 815-815/? I/MediaRouterService: Selected global route:Route cast409 (com.google.android.gms/.cast.media.CastRemoteDisplayProviderService:c5d0e5d940851c488853a91b1635cfde)
09-15 16:07:37.659 255-2209/? W/APM::AudioPolicyManager: releaseOutput() releasing unknown output 320
09-15 16:07:37.661 815-837/? D/WifiService: acquireWifiLockLocked: WifiLock{CastMediaRouteProvider type=1 binder=android.os.BinderProxy@5381e83}
09-15 16:07:37.661 815-2665/? E/native: do suspend false
09-15 16:07:37.661 815-1554/? I/WifiDisplayController: Stopping Wifi display scan.
09-15 16:07:37.662 2694-2694/? I/wpa_supplicant: P2P-FIND-STOPPED 
09-15 16:07:37.663 815-815/? I/MediaRouterService: Connecting to global route: Route cast409 (com.google.android.gms/.cast.media.CastRemoteDisplayProviderService:c5d0e5d940851c488853a91b1635cfde)
09-15 16:07:37.664 3028-3028/? D/ChimeraResource: Successfully parsed resource with package name: com.google.android.gms and resource name drawable/ic_notification_cast_connecting
09-15 16:07:37.669 255-2211/? D/audio_hw_primary: out_set_parameters: enter: usecase(4: audio-ull-playback) kvpairs: routing=2
09-15 16:07:37.679 255-2211/? D/audio_hw_primary: start_output_stream: enter: stream(0xb5fb6fc0)usecase(4: audio-ull-playback) devices(0x2)
09-15 16:07:37.679 255-2211/? D/audio_hw_primary: start_output_stream: enter: usecase(4: audio-ull-playback) devices(0x2)
09-15 16:07:37.679 255-2211/? E/audio_hw_primary: voice_extn_compress_voip_is_active: COMPRESS_VOIP_ENABLED is not defined
09-15 16:07:37.679 255-2211/? E/msm8974_platform: voice_extn_compress_voip_is_active: COMPRESS_VOIP_ENABLED is not defined
09-15 16:07:37.680 255-2211/? D/audio_hw_primary: select_devices: out_snd_device(2: speaker) in_snd_device(0: )
09-15 16:07:37.680 255-2211/? W/msm8974_platform: Codec backend bitwidth 16, samplerate 48000
09-15 16:07:37.680 255-2211/? D/hardware_info: hw_info_append_hw_type : device_name = speaker
09-15 16:07:37.680 255-2211/? I/msm8974_platform: platform_send_audio_calibration: sending audio calibration for snd_device(2) acdb_id(15)
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> send_audio_cal, acdb_id = 15, path =  0
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> send_adm_topology
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> ACDB_CMD_GET_AUDPROC_COMMON_TOPOLOGY_ID
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> send_asm_topology
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> ACDB_CMD_GET_AUDPROC_STREAM_TOPOLOGY_ID
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> send_audtable
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> ACDB_CMD_GET_AUDPROC_COMMON_TABLE
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> AUDIO_SET_AUDPROC_CAL
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> send_audvoltable
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> ACDB_CMD_GET_AUDPROC_GAIN_DEP_STEP_TABLE


                                             [ 09-15 16:07:37.680   255: 2211 D/         ]
                                             Failed to fetch the lookup information of the device 0000000F 
09-15 16:07:37.680 255-2211/? E/ACDB-LOADER: Error: ACDB AudProc vol returned = -19
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> AUDIO_SET_AUDPROC_VOL_CAL
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> send_afe_cal
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> ACDB_CMD_GET_AFE_COMMON_TABLE


                                             [ 09-15 16:07:37.680   255: 2211 D/         ]
                                             Failed to fetch the lookup information of the device 0000000F 
09-15 16:07:37.680 255-2211/? E/ACDB-LOADER: Error: ACDB AFE returned = -19
09-15 16:07:37.680 255-2211/? D/ACDB-LOADER: ACDB -> AUDIO_SET_AFE_CAL
09-15 16:07:37.686 255-2211/? D/audio_hw_primary: select_devices: done
09-15 16:07:37.837 3028-13759/? I/CastDeviceController: [controller-0006 MRP] calling Listener.onConnected(true)
09-15 16:07:37.845 3028-13759/? I/CastDeviceController: [controller-0006 MRP] launchApplicationInternal. id=674A0243, options=LaunchOptions(relaunchIfRunning=true, language=en-US)
09-15 16:07:37.845 4374-4518/? D/DeviceConnectionService: client connected with version: 9452000
09-15 16:07:38.216 3028-4268/? I/CastMediaRouteProvider: CastDeviceController.Listener.onApplicationConnected: appId=674A0243, sessionId=729D062D-A72C-4D5A-92FA-84CAEE580C8F
09-15 16:07:38.219 3028-3028/? I/MirroringControlChannel: [instance-6] offer string; {"udpPort":2346,"supportedStreams":[{"index":0,"type":"audio_source","codecName":"aac","rtpProfile":"cast","rtpPayloadType":127,"ssrc":1,"storeTime":100,"targetDelay":100,"bitRate":128000,"sampleRate":48000,"timeBase":"1\/48000","channels":2,"rtpExtensions":["adaptive_playout_delay"],"receiverRtcpEventLog":true,"aesKey":"33ef675ea7ce18414c584ecdcfc4b442","aesIvMask":"216e2d585125e768cb6ede391a7b21f8","errorRecoveryMode":"castv2"},{"index":1,"type":"video_source","codecName":"h264","rtpProfile":"cast","rtpPayloadType":96,"ssrc":11,"storeTime":100,"targetDelay":100,"maxFrameRate":"60000\/1001","timeBase":"1\/90000","maxBitRate":6000000,"profile":"main","level":"4","resolutions":[{"height":720,"width":1280}],"rtpExtensions":["adaptive_playout_delay"],"receiverRtcpEventLog":true,"aesKey":"33ef675ea7ce18414c584ecdcfc4b442","aesIvMask":"216e2d585125e768cb6ede391a7b21f8","errorRecoveryMode":"castv2","intraRefreshEnable":false}]}
09-15 16:07:38.454 3028-3028/? W/CastRouteController: [instance-6] createSourceOrSink, flags = 0x80000000
09-15 16:07:38.455 3028-27897/? I/JGCastService: enable TDLS on source
09-15 16:07:38.456 3028-27897/? I/GCastSource: config = '
09-15 16:07:38.457 3028-27897/? I/GCastSource: {
09-15 16:07:38.457 3028-27897/? I/GCastSource:   "extraData": {
09-15 16:07:38.457 3028-27897/? I/GCastSource:       "maxBitrate": 6000,
09-15 16:07:38.457 3028-27897/? I/GCastSource:       "maxFramerate": "60000\/1001",
09-15 16:07:38.457 3028-27897/? I/GCastSource:       "minLatency": 100,
09-15 16:07:38.457 3028-27897/? I/GCastSource:       "receiverProductName": "Chromecast",
09-15 16:07:38.457 3028-27897/? I/GCastSource:       "receiverVersion": "5",
09-15 16:07:38.457 3028-27897/? I/GCastSource:       "resolution": "1280x720",
09-15 16:07:38.457 3028-27897/? I/GCastSource:       "senderBuild": "MHC19Q",
09-15 16:07:38.457 3028-27897/? I/GCastSource:       "senderGmsCoreVersion": 9452000,
09-15 16:07:38.457 3028-27897/? I/GCastSource:       "senderModel": "A0001",
09-15 16:07:38.457 3028-27897/? I/GCastSource:       "senderPlatform": "Android",
09-15 16:07:38.457 3028-27897/? I/GCastSource:       "senderVersion": "6.0.1"
09-15 16:07:38.457 3028-27897/? I/GCastSource:     },
09-15 16:07:38.457 3028-27897/? I/GCastSource:   "maxTargetDelay": 500,
09-15 16:07:38.457 3028-27897/? I/GCastSource:   "remoteFriendlyName": "cast409",
09-15 16:07:38.457 3028-27897/? I/GCastSource:   "sendFormats": [
09-15 16:07:38.457 3028-27897/? I/GCastSource:       {
09-15 16:07:38.457 3028-27897/? I/GCastSource:         "aes-iv-mask": [redacted],
09-15 16:07:38.457 3028-27897/? I/GCastSource:         "aes-key": [redacted],
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "bit_rate": 128000,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "channels": 2,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "codec_name": "aac_ld_adts",
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "index": 0,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "receiver_events": true,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "remote_rtp_port": 49794,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "remote_ssrc": 2,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "rtp_extensions": [
09-15 16:07:38.458 3028-27897/? I/GCastSource:             "adaptive_playout_delay"
09-15 16:07:38.458 3028-27897/? I/GCastSource:           ],
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "rtp_payload_type": 127,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "rtp_port": 2346,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "rtp_profile": "cast",
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "sample_rate": 48000,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "ssrc": 1,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "store_time": 100,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "time_base": 48000,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "type": "audio_source"
09-15 16:07:38.458 3028-27897/? I/GCastSource:       },
09-15 16:07:38.458 3028-27897/? I/GCastSource:       {
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "aes-iv-mask": [redacted],
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "aes-key": [redacted],
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "codec_name": "h264",
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "error_recovery_mode": "castv2",
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "index": 1,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "key_frame_refresh_interval": 60,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "max_bit_rate": 6000000,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "max_frame_rate": "60000\/1001",
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "receiver_events": true,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "remote_rtp_port": 49794,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "remote_ssrc": 12,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "resolutions": [
09-15 16:07:38.458 3028-27897/? I/GCastSource:             {
09-15 16:07:38.458 3028-27897/? I/GCastSource:               "height": 720,
09-15 16:07:38.458 3028-27897/? I/GCastSource:               "width": 1280
09-15 16:07:38.458 3028-27897/? I/GCastSource:             }
09-15 16:07:38.458 3028-27897/? I/GCastSource:           ],
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "rtp_extensions": [
09-15 16:07:38.458 3028-27897/? I/GCastSource:             "adaptive_playout_delay"
09-15 16:07:38.458 3028-27897/? I/GCastSource:           ],
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "rtp_payload_type": 96,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "rtp_port": 2346,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "rtp_profile": "cast",
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "ssrc": 11,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "store_time": 100,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "time_base": 90000,
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "type": "video_source",
09-15 16:07:38.458 3028-27897/? I/GCastSource:         "use_intra_macroblock_cyclic_mode": false
09-15 16:07:38.458 3028-27897/? I/GCastSource:       }
09-15 16:07:38.458 3028-27897/? I/GCastSource:     ]
09-15 16:07:38.458 3028-27897/? I/GCastSource: }
09-15 16:07:38.458 3028-27897/? I/GCastSource: '
09-15 16:07:38.458 3028-27897/? I/GCastSource: Connecting to receiver: cast409
09-15 16:07:38.458 3028-27897/? I/GCastSource: increasing video delay to 100 ms, max unacked 6
09-15 16:07:38.459 3028-27897/? I/GCastSource: encrypting video.
09-15 16:07:38.459 3028-27897/? I/GCastSource: Using ADTS
09-15 16:07:38.459 3028-27897/? I/GCastSource: increasing audio delay to 100 ms, max unacked 16
09-15 16:07:38.459 3028-27897/? I/GCastSource: encrypting audio.
09-15 16:07:38.459 3028-27897/? I/GCastSource: connecting RTP from 0.0.0.0:2346 to 192.168.1.6:49794
09-15 16:07:38.459 3028-27897/? I/NetworkSession: socket 134 listening to 0.0.0.0:2346
09-15 16:07:38.460 2694-2694/? I/wpa_supplicant: TDLS: Failed to send message (action_code=10)
09-15 16:07:38.461 2694-2694/? I/wpa_supplicant: TDLS: Creating peer entry for 6c:ad:f8:8b:d0:26
09-15 16:07:38.463 3028-27897/? I/Converter: initEncoder, mOutputFormat - AMessage(what = 0x00000000) = {
                                               string error_recovery_mode = "castv2"
                                               int32_t use_intra_macroblock_cyclic_mode = 0
                                               string mime = "video/avc"
                                               int32_t key_frame_refresh_interval = 60
                                               int32_t width = 1280
                                               int32_t height = 720
                                               int32_t max-bitrate = 6000000
                                               float max-fps-to-encoder = 59.940060
                                               int32_t bitrate = 3000000
                                               int32_t store-metadata-in-buffers = 1
                                               int32_t color-format = 2130708361
                                               int64_t repeat-previous-frame-after = 70000
                                               int64_t max-pts-gap-to-encoder = 33333
                                             }
09-15 16:07:38.466 3028-27901/? I/OMXClient: Using client-side OMX mux.
09-15 16:07:38.470 3028-27897/? I/Converter: using video bitrate of 3000000 bps
09-15 16:07:38.470 3028-27897/? I/Converter: Optmized for quality/video - not using IntraRefreshCyclic
09-15 16:07:38.471 255-12601/? E/OMXNodeInstance: getParameter(55:qcom.encoder.avc, ParamConsumerUsageBits(0x6f800004)) ERROR: UnsupportedIndex(0x8000101a)
09-15 16:07:38.472 255-2219/? W/OMXNodeInstance: [55:qcom.encoder.avc] component does not support metadata mode; using fallback
09-15 16:07:38.472 3028-27901/? E/ACodec: [OMX.qcom.video.encoder.avc] storeMetaDataInBuffers (output) failed w/ err -1010
09-15 16:07:38.472 3028-27901/? W/ACodec: do not know color format 0x7fa30c04 = 2141391876
09-15 16:07:38.472 3028-27901/? W/ACodec: do not know color format 0x7f000789 = 2130708361
09-15 16:07:38.474 3028-27901/? I/FFMPEGSoftCodec: Decoder will be in frame by frame mode
09-15 16:07:38.477 3028-27901/? I/ACodec: setupVideoEncoder succeeded
09-15 16:07:38.478 3028-27901/? W/ACodec: do not know color format 0x7f000789 = 2130708361
09-15 16:07:38.482 255-2219/? E/OMXNodeInstance: getParameter(55:qcom.encoder.avc, ParamConsumerUsageBits(0x6f800004)) ERROR: UnsupportedIndex(0x8000101a)
09-15 16:07:38.494 255-255/? D/r_submix: adev_open_input_stream(addr=0)
09-15 16:07:38.495 255-255/? D/r_submix:  Non-NULL shut down sink when opening input stream, releasing, refcount=4
09-15 16:07:38.495 255-255/? D/r_submix: submix_audio_device_release_pipe_l(idx=9) addr=0
09-15 16:07:38.495 255-255/? D/r_submix: submix_audio_device_create_pipe_l(addr=0, idx=9)
09-15 16:07:38.495 255-255/? D/r_submix:   now using address 0 for route 9
09-15 16:07:38.495 255-27909/? I/AudioFlinger: AudioFlinger's thread 0xad940000 ready to run
09-15 16:07:38.495 255-27909/? I/r_submix: in_standby()
09-15 16:07:38.496 255-27909/? I/r_submix: in_standby()
09-15 16:07:38.498 3028-27897/? I/Converter: initEncoder, mOutputFormat - AMessage(what = 0x00000000) = {
                                               string mime = "audio/mp4a-latm"
                                               int32_t sample-rate = 48000
                                               int32_t channel-count = 2
                                               int32_t bitrate = 128000
                                               int32_t max-input-size = 7680
                                             }
09-15 16:07:38.499 3028-27910/? I/OMXClient: Using client-side OMX mux.
09-15 16:07:38.579 3028-27897/? I/Converter: using audio bitrate of 128000 bps
09-15 16:07:38.583 255-12601/? I/AudioFlinger: openOutput(), module 12 Device 8000, SamplingRate 48000, Format 0x000001, Channels 3, flags 0
09-15 16:07:38.583 255-12601/? D/r_submix: adev_open_output_stream(address=0)
09-15 16:07:38.583 255-12601/? D/r_submix: submix_audio_device_create_pipe_l(addr=0, idx=9)
09-15 16:07:38.583 255-12601/? D/r_submix:   now using address 0 for route 9
09-15 16:07:38.583 255-12601/? I/AudioFlinger: AudioStreamOut::open(), mHalFormatIsLinearPcm = 1
09-15 16:07:38.583 255-12601/? I/AudioFlinger: HAL output buffer size 1024 frames, normal sink buffer size 1024 frames
09-15 16:07:38.584 255-27918/? I/AudioFlinger: AudioFlinger's thread 0xadb40000 ready to run
09-15 16:07:38.585 255-27918/? I/r_submix: out_standby()
09-15 16:07:38.587 255-12601/? I/AudioFlinger: HAL output buffer size 1024 frames, normal sink buffer size 1024 frames
09-15 16:07:38.588 255-27919/? I/AudioFlinger: AudioFlinger's thread 0xadbc0000 ready to run
09-15 16:07:38.597 255-2208/? D/audio_hw_primary: adev_set_parameters: enter: 0=;connect=32768
09-15 16:07:38.597 255-2208/? E/voice: voice_extn_compress_voip_set_parameters: COMPRESS_VOIP_ENABLED is not defined
09-15 16:07:38.597 255-2208/? E/bt_a2dp_hw: adev_set_parameters: ERROR: set param called even when stream out is null
09-15 16:07:38.599 815-4743/? I/DisplayManagerService: Display device added: DisplayDeviceInfo{"cast409": uniqueId="virtual:com.google.android.gms,10018,cast409,0", 1280 x 720, modeId 7, defaultModeId 7, supportedModes [{id=7, width=1280, height=720, fps=60.0}], colorTransformId 0, defaultColorTransformId 0, supportedColorTransforms [], density 213, 213.0 x 213.0 dpi, appVsyncOff 0, presDeadline 16666666, touch NONE, rotation 0, type VIRTUAL, state ON, owner com.google.android.gms (uid 10018), FLAG_SECURE, FLAG_PRESENTATION}
09-15 16:07:38.606 815-3564/? D/WifiService: acquireWifiLockLocked: WifiLock{CastMirroringProvider type=1 binder=android.os.BinderProxy@7d24f56}
09-15 16:07:38.607 3028-3028/? D/CastMirroringProvider: No Notifier
09-15 16:07:38.607 815-2665/? E/native: do suspend false
09-15 16:07:38.607 815-3560/? D/WifiService: acquireWifiLockLocked: WifiLock{CastRemoteDisplayProvider type=1 binder=android.os.BinderProxy@b3c2bd7}
09-15 16:07:38.607 815-2665/? E/native: do suspend false
09-15 16:07:38.608 3028-3028/? D/ChimeraResource: Successfully parsed resource with package name: com.google.android.gms and resource name drawable/ic_notification_cast_on
09-15 16:07:38.608 815-815/? I/MediaRouterService: Connected to global route: Route cast409 (com.google.android.gms/.cast.media.CastRemoteDisplayProviderService:c5d0e5d940851c488853a91b1635cfde)
09-15 16:07:38.625 245-245/? I/SurfaceFlinger: EGL information:
09-15 16:07:38.625 245-245/? I/SurfaceFlinger: vendor    : Android
09-15 16:07:38.625 245-245/? I/SurfaceFlinger: version   : 1.4 Android META-EGL
09-15 16:07:38.625 245-245/? I/SurfaceFlinger: extensions: EGL_KHR_get_all_proc_addresses EGL_ANDROID_presentation_time EGL_KHR_swap_buffers_with_damage EGL_KHR_image EGL_KHR_image_base EGL_KHR_lock_surface EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_gl_renderbuffer_image EGL_KHR_fence_sync EGL_KHR_create_context EGL_EXT_create_context_robustness EGL_ANDROID_image_native_buffer EGL_KHR_wait_sync EGL_ANDROID_recordable EGL_KHR_partial_update 
09-15 16:07:38.625 245-245/? I/SurfaceFlinger: Client API: OpenGL_ES
09-15 16:07:38.625 245-245/? I/SurfaceFlinger: EGLSurface: 8-8-8-8, config=0x5
09-15 16:07:38.643 3028-27897/? I/GCastBase: updating NTP offset, accuracy +/- 2931 us

更新

关于 Ali Naddaf 的回答,我担心的是,我也是这么想的,但是当您使用 mediacodec 和 muxer api 录制视频时,它的 moov atom 不会写在文件的开头,因此在录制完成之前无法播放(即可以'不被流式传输),那么内置应用程序是如何同时创建和流式传输的,如果你检查它大量提到 RTP 关键字的日志,那是什么?

我之前问过使用 muxer 创建文件的问题,但答案并不令人满意顺便说一句,这是上一个问题链接

Android Mediamuxer moov atom

还尝试了 Presentation API 演示,但它崩溃了 https://github.com/googlecast/CastRemoteDisplay-android

编辑那些演示演示不起作用,演示将无法使用CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID

您必须从https://cast.google.com/publish创建 APP id

4

1 回答 1

-3

Chromecast 不支持 RTP。

您可以使用 RemoteDiaplay API,如日志所示,它基本上将您的应用程序中的视图“镜像”到 chromecast,但在这种情况下,从 chromecast 的角度来看,它基本上是在播放电影(您的手机已经编码并放在一起从指定的视图并正在流式传输到 chromecast)。同样,chromecast 本身不支持 RTP

于 2016-09-15T16:48:10.643 回答