gpt4 book ai didi

java - lib vlc android 不会播放原始 h264?

转载 作者:行者123 更新时间:2023-11-28 06:10:04 26 4
gpt4 key购买 nike

我需要开发一个使用 vlc 媒体播放器来选择 rtsp 流并播放原始 h264 的 android 应用程序。我按照 AndroidCompile 中的说明编译了 lib vlc android使用 Mac OSx。该项目编译时出现了一些警告(如下所示),我能够在 Android 平板电脑上运行 vlc 应用程序。 vlc 应用程序可以很好地播放 h264 容器的 rtsp 流,但它不会从实时摄像头播放原始 h264。下面的 logcat 显示了几个 unable to decode stream: java.lang.NullPointerException 但我在播放任何流的开始时都看到了这些,我想是 vlc 试图找出要使用的解码器。正如日志猫所示,它确定了 h264。在 playbackservice 宣布开始播放后不久,它宣布结束播放服务。

在 google playstore 上找到的 vlc android 应用程序能够很好地播放相同的提要,因此提要没有任何问题,并且发布版本具有播放原始 h264 的编解码器和功能。 C/C++ 库的编译方式是否存在问题?还是默认情况下 libvlc(compiled) 不播放原始 h264?我没有修改 AndroidCompile 中的任何源代码项目。有没有人编译过 libvlc 并且能够播放原始 h264 的 rtsp 流?或者我应该考虑将流通过管道输送到容器中并从容器中播放,我该怎么做?

我的机器运行 Mac OS X,在运行 compile.sh 脚本之前,我安装了推荐的构建工具,项目从 Android Studio 运行。在 logcat 下方,以及项目编译时的警告 fragment 。

>07-15 14:38:26.139    9037-9037/? D/PlaybackService.Client﹕ Service Connected
>07-15 14:38:26.139 9037-9037/? V/VLC/PlaybackService﹕ Creating on-the-fly Media object for rtsp://root:****@10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720
>07-15 14:38:26.139 9037-9037/? V/VLC/PlaybackService﹕ Loading position 0 in [org.videolan.vlc.MediaWrapper@42001178]
>07-15 14:38:26.149 439-744/? I/MediaFocusControl﹕ AudioFocus requestAudioFocus() from android.media.AudioManager@41f316d0org.videolan.vlc.PlaybackService$1@41e62750
>07-15 14:38:26.149 439-727/? I/MediaFocusControl﹕ Remote Control registerMediaButtonIntent() for PendingIntent{4220baf0: PendingIntentRecord{41fd9ab0 org.videolan.vlc.debug broadcastIntent}}
>07-15 14:38:26.149 9037-9037/? D/VLC﹕ [72210838] core generic: creating audio output
>07-15 14:38:26.149 9037-9037/? D/VLC﹕ [73a56e28] core audio output: looking for audio output module matching "android_audiotrack,none": 4 candidates
>07-15 14:38:26.149 9037-9037/? D/VLC﹕ [73a56e28] core audio output: using audio output module "android_audiotrack"
>07-15 14:38:26.149 9037-9037/? D/VLC﹕ [72210838] core generic: keeping audio output
>07-15 14:38:26.149 9037-9037/? D/VLC﹕ [73acc248] core input: Creating an input for 'rtsp://10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720'
>07-15 14:38:26.149 9037-9412/? D/VLC﹕ [73acc248] core input: using timeshift granularity of 50 MiB, in path '/tmp'
>07-15 14:38:26.159 9037-9412/? D/VLC﹕ [73acc248] core input: `rtsp://root:****@10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720' gives access `rtsp' demux `' path `root:****@10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720'
>07-15 14:38:26.159 9037-9412/? D/VLC﹕ [73acc248] core input: specified demux `any'
>07-15 14:38:26.159 9037-9412/? D/VLC﹕ [73acc248] core input: creating demux: access='rtsp' demux='any' location='root:****@10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720' file='(null)'
>07-15 14:38:26.159 9037-9412/? D/VLC﹕ [73890268] core demux: looking for access_demux module matching "rtsp": 6 candidates
>07-15 14:38:26.159 9037-9412/? D/VLC﹕ [73890268] live555 demux: version 2015.06.24
>07-15 14:38:26.159 9037-9052/? E/VLC-std﹕ Opening connection to
>07-15 14:38:26.159 9037-9052/? E/VLC-std﹕ 10.168.1.45
>07-15 14:38:26.159 9037-9052/? E/VLC-std﹕ , port
>07-15 14:38:26.159 9037-9052/? E/VLC-std﹕ 554
>07-15 14:38:26.159 9037-9052/? E/VLC-std﹕ ...
>07-15 14:38:26.159 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.179 9037-9052/? E/VLC-std﹕ ...remote connection opened
> Sending request: OPTIONS rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720 RTSP/1.0
> CSeq: 2
> User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
>07-15 14:38:26.179 9037-9052/? E/VLC-std﹕ Received 143
>07-15 14:38:26.179 9037-9052/? E/VLC-std﹕ new bytes of response data.
> Received a complete OPTIONS response:
> RTSP/1.0 200 OK
> CSeq: 2
> Public: DESCRIBE, GET_PARAMETER, PAUSE, PLAY, SETUP, SET_PARAMETER, >TEARDOWN
> Date: Wed, 15 Jul 2015 20:32:31 GMT
> Sending request:
>07-15 14:38:26.179 9037-9052/? E/VLC-std﹕ DESCRIBE rtsp://10.168.1.45:554/axis-media/media.amp?>videocodec=h264&resolution=1280x720 RTSP/1.0
> CSeq: 3
> User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
> Accept: application/sdp
>07-15 14:38:26.189 9037-9037/? E/BitmapFactory﹕ Unable to decode >stream: java.lang.NullPointerException
>07-15 14:38:26.189 9037-9052/? E/VLC-std﹕ Received 247 new bytes of >response data.
> Received a complete DESCRIBE response:
> RTSP/1.0 401 Unauthorized
> CSeq: 3
> WWW-Authenticate: Digest realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", stale=FALSE
> WWW-Authenticate: Basic realm="AXIS_00408CE6D77E"
> Date: Wed, 15 Jul 2015 20:32:31 GMT
> Resending...
> Sending request: DESCRIBE rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720 RTSP/1.0
> CSeq: 4
> Authorization: Digest username="root", realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", uri="rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720", >response="23cc09ed9e29fc64404cddae9c8b44cc"
> User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
> Accept: application/sdp
>07-15 14:38:26.199 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.199 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.209 9037-9412/? D/VLC﹕ [73890268] live555 demux: RTP >subsession 'video/H264'
>07-15 14:38:26.209 9037-9052/? E/VLC-std﹕ Received 809 new bytes of >response data.
> Received a complete DESCRIBE response:
> RTSP/1.0 200 OK
> CSeq: 4
> Content-Type: application/sdp
> Content-Base: rtsp://10.168.1.45:554/axis-media/media.amp/
> Date: Wed, 15 Jul 2015 20:32:31 GMT
> Content-Length: 632
> v=0
> o=- 1436992351621972 1436992351621972 IN IP4 10.168.1.45
> s=Media Presentation
> e=NONE
> b=AS:50000
> t=0 0
> a=control:rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720
> a=range:npt=0.000000-
> m=video 0 RTP/AVP 96
> c=IN IP4 0.0.0.0
> b=AS:50000
> a=framerate:25.0
> >a=transform:1.000000,0.000000,0.000000;0.000000,0.900000,0.000000;0.000000,0.000000,1.000000
> a=control:rtsp://10.168.1.45:554/axis-media/media.amp/trackID=1?videocodec=h264&resolution=1280x720
> a=rtpmap:96 H264/90000
> a=fmtp:96 packetization-mode=1; profile-level-id=420029; sprop->parameter-sets=Z0IAKeKQCgC3YC3AQEBpB4kRUA==,aM48gA==
Sending request:
>07-15 14:38:26.209 9037-9052/? E/VLC-std﹕ SETUP rtsp://10.168.1.45:554/axis-media/media.amp/trackID=1?videocodec=h264&resolution=1280x720 RTSP/1.0
> CSeq: 5
> Authorization: Digest username="root", realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", uri="rtsp://10.168.1.45:554/axis-media/media.amp/", response="8c5fc662991d144c3d2d319abdb09802"
> User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
> Transport: RTP/AVP;unicast;client_port=53078-53079
>07-15 14:38:26.219 576-588/? D/dalvikvm﹕ GC_FOR_ALLOC freed 2420K, 79% free 8246K/38240K, paused 30ms, total 31ms
>07-15 14:38:26.229 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.239 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.259 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.259 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.269 439-722/? W/InputMethodManagerService﹕ Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@41c773b8 attribute=null, token = android.os.BinderProxy@4225d8a0
>07-15 14:38:26.289 9037-9052/? E/VLC-std﹕ Received 198 new bytes of response data.
>07-15 14:38:26.289 9037-9052/? E/VLC-std﹕ Received a complete SETUP >response:
> RTSP/1.0 200 OK
> CSeq: 5
> Session: 1EB7CD91; timeout=60
> Transport: RTP/AVP;unicast;client_port=53078->53079;server_port=50124-50125;ssrc=57E15CB7;mode="PLAY"
> Date: Wed, 15 Jul 2015 20:32:31 GMT
>07-15 14:38:26.289 9037-9412/? D/VLC﹕ [73acc248] core input: selecting program id=0
>07-15 14:38:26.289 9037-9412/? D/VLC﹕ [73890268] live555 demux: setup start: 0.000000 stop:0.000000
>07-15 14:38:26.289 9037-9052/? E/VLC-std﹕ Sending request: PLAY rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720 RTSP/1.0
> CSeq: 6
> Authorization: Digest username="root", realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", uri="rtsp://10.168.1.45:554/axis-media/media.amp/", response="20a147ef13ac0dd25e485b077f24d072"
> User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
> Session: 1EB7CD91
> Range: npt=0.000-
>07-15 14:38:26.299 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.339 9037-9037/? D/dalvikvm﹕ GC_FOR_ALLOC freed 732K, 15% free 6659K/7816K, paused 24ms, total 25ms
>07-15 14:38:26.359 439-729/? I/ActivityManager﹕ START u0 {act=org.videolan.vlc.gui.video.PLAY_FROM_VIDEOGRID flg=0x18000000 cmp=org.videolan.vlc.debug/org.videolan.vlc.gui.video.VideoPlayerActivity (has extras)} from pid 9037
>07-15 14:38:26.409 9037-9052/? E/VLC-std﹕ Received 233 new bytes of response data.
>07-15 14:38:26.409 9037-9052/? E/VLC-std﹕ Received a complete PLAY response:
> RTSP/1.0 200 OK
> CSeq: 6
> Session: 1EB7CD91
> Range: npt=0-
> RTP-Info: url=rtsp://10.168.1.45:554/axis-media/media.amp/trackID=1?videocodec=h264&resolution=1280x720;seq=31479;rtptime=1375710016
Date: Wed, 15 Jul 2015 20:32:31 GMT
>07-15 14:38:26.409 9037-9412/? D/VLC﹕ [73890268] live555 demux: We have a timeout of 60 seconds
>07-15 14:38:26.409 9037-9412/? D/VLC﹕ [73890268] live555 demux: spawned timeout thread
>07-15 14:38:26.409 9037-9412/? D/VLC﹕ [73890268] live555 demux: play start: 0.000000 stop:0.000000
>07-15 14:38:26.409 9037-9412/? D/VLC﹕ [73890268] core demux: using access_demux module "live555"
>07-15 14:38:26.409 9037-9412/? D/VLC﹕ [73acc248] core input: video is disabled, not selecting ES 0x0
>07-15 14:38:26.409 9037-9412/? D/VLC﹕ [73c1aea0] core demux meta: looking for meta reader module matching "any": 1 candidates
>07-15 14:38:26.409 9037-9412/? D/VLC﹕ [73c1aea0] core demux meta: no meta reader modules matched
>07-15 14:38:26.409 9037-9412/? D/VLC﹕ [73acc248] core input: `rtsp://root:****@10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720' successfully opened
>07-15 14:38:26.409 9037-9052/? E/VLC-std﹕ Sending request: TEARDOWN rtsp://10.168.1.45:554/axis-media/media.amp/trackID=1?videocodec=h264&resolution=1280x720 RTSP/1.0
> CSeq: 7
> Authorization: Digest username="root", realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", uri="rtsp://10.168.1.45:554/axis-media/media.amp/", response="c03b9bbe9546d7c65fdc193c8cee8c8f"
> User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
> Session: 1EB7CD91
>07-15 14:38:26.439 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.439 116-336/? W/AudioFlinger﹕ write blocked for 374 msecs, 150 delayed writes, thread 0x40c51008
>07-15 14:38:26.469 9037-9037/? I/VLC/PlaybackService﹕ Media.Event.ParsedChanged
>07-15 14:38:26.469 9037-9037/? D/VLC/MediaWrapper﹕ Title rtsp://10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720
>07-15 14:38:26.469 9037-9037/? D/VLC/MediaWrapper﹕ Artist null
>07-15 14:38:26.469 9037-9037/? D/VLC/MediaWrapper﹕ Genre null
>07-15 14:38:26.469 9037-9037/? D/VLC/MediaWrapper﹕ Album null
>07-15 14:38:26.479 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.489 9037-9412/? D/VLC﹕ [73890268] live555 demux: tk-rtpSource->hasBeenSynchronizedUsingRTCP()
>07-15 14:38:26.489 9037-9412/? E/VLC﹕ [73acc248] core input: ES_OUT_RESET_PCR called
>07-15 14:38:26.489 9037-9052/? E/VLC-std﹕ Sending request:
>07-15 14:38:26.489 9037-9052/? E/VLC-std﹕ GET_PARAMETER rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720 RTSP/1.0
> CSeq: 8
> Authorization: Digest username="root", realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", uri="rtsp://10.168.1.45:554/axis-media/media.amp/", response="eef50526f953157a541671aac10b7d99"
> User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
> Session: 1EB7CD91
>07-15 14:38:26.489 9037-9052/? E/VLC-std﹕ [ 07-15 14:38:26.489 9037: 9412 D/VLC ]
[73890268] live555 demux: RTSP track Close, 0 track remaining
>07-15 14:38:26.489 9037-9412/? D/VLC﹕ [73acc248] core input: EOF reached
>07-15 14:38:26.489 9037-9412/? D/VLC﹕ [73890268] core demux: removing module "live555"
>07-15 14:38:26.499 9037-9052/? E/VLC-std﹕ Sending request:
>07-15 14:38:26.499 9037-9052/? E/VLC-std﹕ TEARDOWN rtsp://10.168.1.45:554/axis-media/media.amp?videocodec=h264&resolution=1280x720 RTSP/1.0
> CSeq: 9
> Authorization: Digest username="root", realm="AXIS_00408CE6D77E", nonce="00478005Y607330b149b17a0889d51cdbe1476bcbc90d0", uri="rtsp://10.168.1.45:554/axis-media/media.amp/", response="c03b9bbe9546d7c65fdc193c8cee8c8f"
> User-Agent: LibVLC/3.0.0-git (LIVE555 Streaming Media v2015.06.24)
> Session: 1EB7CD91
>07-15 14:38:26.499 9037-9052/? E/VLC-std﹕ [ 07-15 14:38:26.499 9037: 9412 D/VLC ]
[73acc248] core input: Program doesn't contain anymore ES
>07-15 14:38:26.499 9037-9412/? D/dalvikvm﹕ threadid=15: thread exiting, not yet detached (count=0)
>07-15 14:38:26.499 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.519 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.529 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.709 439-729/? D/dalvikvm﹕ GC_FOR_ALLOC freed 1741K, 32% free 10561K/15308K, paused 142ms, total 142ms
>07-15 14:38:26.729 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.749 9037-9037/? I/VLC/PlaybackService﹕ MediaPlayer.Event.Playing
>07-15 14:38:26.759 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.769 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.789 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.799 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:26.829 9037-9037/? D/VLC/VideoPlayerActivity﹕ MediaRouter information : android.media.MediaRouter@41e6f950
>07-15 14:38:26.829 9037-9037/? I/VLC/VideoPlayerActivity﹕ No secondary display detected
>07-15 14:38:26.959 9037-9037/? D/dalvikvm﹕ GC_FOR_ALLOC freed 1372K, 22% free 6328K/8044K, paused 24ms, total 26ms
>07-15 14:38:27.029 9037-9037/? I/Choreographer﹕ Skipped 30 frames! The application may be doing too much work on its main thread.
>07-15 14:38:27.309 9037-9037/? I/VLC/PlaybackService﹕ MediaPlayerEndReached
>07-15 14:38:27.339 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:27.349 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:27.359 9037-9037/? E/BitmapFactory﹕ Unable to decode stream: java.lang.NullPointerException
>07-15 14:38:27.359 9037-9037/? W/VLC/PlaybackService﹕ Warning: invalid next index, aborted !
>07-15 14:38:27.359 9037-9037/? D/VLC﹕ [73acc248] core input: Destroying the input for 'rtsp://10.168.1.45/axis-media/media.amp?videocodec=h264&resolution=1280x720'
>07-15 14:38:27.359 9037-9037/? D/VLC﹕ [73a56e28] core audio output: removing module "android_audiotrack"
>07-15 14:38:27.379 439-744/? I/MediaFocusControl﹕ AudioFocus abandonAudioFocus() from android.media.AudioManager@41f316d0org.videolan.vlc.PlaybackService$1@41e62750
>07-15 14:38:27.379 439-1293/? I/MediaFocusControl﹕ Remote Control unregisterMediaButtonIntent() for PendingIntent{42033a48: PendingIntentRecord{41fd9ab0 org.videolan.vlc.debug broadcastIntent}}
>07-15 14:38:27.399 9037-9037/? D/PlaybackService.Client﹕ Service Connected
>07-15 14:38:27.479 9037-9037/? E/VLC/VideoPlayerActivity﹕ Invalid surface size
>07-15 14:38:27.489 9037-9037/? D/VLC/VideoPlayerActivity﹕ Continuing playback from AudioService at index 0
>07-15 14:38:27.489 439-453/? I/ActivityManager﹕ Displayed org.videolan.vlc.debug/org.videolan.vlc.gui.video.VideoPlayerActivity: +1s48ms
>07-15 14:38:27.499 9037-9037/? I/AppCompatDelegate﹕ The Activity's LayoutInflater already has a Factory installed so we can not install AppCompat's
>07-15 14:38:30.069 116-336/? D/AudioHardware﹕ AudioHardware pcm playback is going to standby.
> ## Quoted Heading ##


Android NDK: WARNING:jni/Android.mk:iomx.13: non-system libraries in linker flags: -lgcc -lstagefright -lmedia -lbinder
Android NDK: This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES
Android NDK: or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the
Android NDK: current module
Android NDK: WARNING:jni/Android.mk:iomx.14: non-system libraries in linker flags: -lgcc -lstagefright -lmedia -lbinder
Android NDK: This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES
Android NDK: or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the
Android NDK: current module
Android NDK: WARNING:jni/Android.mk:vlcjni: non-system libraries in linker flags: /Users/breinosa/Library/Android/android/.modules/build-android-arm-linux-androideabi/liba52_plugin.a

最佳答案

我在很多地方都注意到了这一点:

    Unable to decode stream: java.lang.NullPointerException

您需要找出导致 NPE 的原因。

在没有看到您的代码的情况下,我最初的猜测是它正在将一个 null 传递给位图工厂,并说“对其进行解码”。

关于java - lib vlc android 不会播放原始 h264?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31441692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com