- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试开发一个应用程序,通过 RTSP(实时流协议(protocol))从安全摄像头下载实时视频流。
我已成功连接到相机并可以在 VideoView
中查看视频。但是,我想要对数据流进行低级访问,因此一直在研究 MediaExtractor
API。
当我将数据源设置为 RTSP URI 时,我收到 IOException
- 无法打开文件。这是令人困惑的,因为相同的 URI 在 VideoView
和其他媒体播放器(如 VLC)中正常工作。我假设 VideoView
必须在“幕后”使用相同的 MediaExtractor
选项。 MediaExtractor
是否支持 RTSP?我期待 MediaExtractor 打开我的 RTSP URI。我在文档中看不到任何不受支持的地方。如果我遗漏了什么,请指出正确的方向。我看到还有其他可用的库,例如 FFmpeg、VLC 和 Live555,但我尝试尽可能使用 Android SDK。
代码(Kotlin):
val extractor = MediaExtractor()
extractor.setDataSource("rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov")
错误:
2018-12-11 15:43:23.259 21127-21127/com.crichq.myactionreplayhub E/FileSource: Failed to open file 'rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov'. (No such file or directory)
2018-12-11 15:43:23.260 21127-21127/com.crichq.myactionreplayhub D/AndroidRuntime: Shutting down VM
2018-12-11 15:43:23.262 21127-21127/com.crichq.myactionreplayhub E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.crichq.myactionreplayhub, PID: 21127
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.crichq.myactionreplayhub/com.crichq.myactionreplayhub.MediaExtractorActivity}: java.io.IOException: Failed to instantiate extractor.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by: java.io.IOException: Failed to instantiate extractor.
at android.media.MediaExtractor.nativeSetDataSource(Native Method)
at android.media.MediaExtractor.setDataSource(MediaExtractor.java:202)
at com.crichq.myactionreplayhub.MediaExtractorActivity.onCreate(MediaExtractorActivity.kt:16)
at android.app.Activity.performCreate(Activity.java:7174)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Android 版本:
compileSdkVersion 28 (Android 9.0)
Android 测试设备:
三星 Galaxy S7 Edge(运行 Android 8.0.0)
最佳答案
MediaExtractor 仅支持 HTTP 或本地文件
public void setDataSource(字符串路径)设置要使用的数据源(文件路径或 http URL)。
path String: 文件的路径,或者流的http URL
关于安卓 MediaExtractor RTSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53716893/
我正在尝试构建一个播放器,使用 MediaCodec 播放带有 2 个音轨的 mpeg2-ts 流和 MediaExtractor .当我将 URL 设置为提取器时:extractor.setData
我正在尝试使用 MediaExtractor 和 MediaCodec 从电影中获取特定时间的特定帧作为图像。如果满足以下条件,我可以成功完成: 我使用 extractor.seekTo(time,
我正在尝试开发一个应用程序,通过 RTSP(实时流协议(protocol))从安全摄像头下载实时视频流。 我已成功连接到相机并可以在 VideoView 中查看视频。但是,我想要对数据流进行低级访问,
使用 MediaExtractor 类,我可以从保存的 mp4 视频中获取编码的音频样本数据,如下所示: ByteBuffer byteBuffer = ByteBuffer.allocate(102
什么意思: SAMPLE_FLAG_SYNC SAMPLE_FLAG_ENCRYPTED 我很难理解音频文件的“同步样本”概念。 此外,请随时提出任何技术引用以了解“整个场景”。 最佳答案 SAMPL
我是新来的,刚接触 Android 开发。这是我的第一个问题。 我正在使用 MediaExtractor 和 MediaCodec 播放带有视频和音频的 mp4 文件。现在我得到一对视频提取器/编解码
MediaExtractor 类的 advance() 方法比预期更早(在文件结束之前)发出流结束信号,我遇到了问题。根据谷歌引用 advance()使用本地文件时方法可能会出错(这是我的情况 - f
我试着回答这个问题 Concatenate multiple mp4 audio files using android´s MediaMuxer并连接视频文件。 但由于某些原因,当我调用 readS
我使用 MediaCodec 和 MediaExtractor 创建了一个视频播放器,但是当我尝试使用 MediaExtractor seekTo< 更改媒体位置时 方法它真的很慢(寻找 1080P
我正在尝试使用 MediaExtract 提取 avi 文件的轨道 0(视频轨道)并使用 MediaCodec 编码为 h264 格式。这是我配置 mediaCodec 的方式 public Medi
我正在尝试使用 MediaExtractor/MediaCodec 播放 mp3 流。由于延迟和长缓冲区大小,MediaPlayer 是不可能的。 我找到的唯一示例代码是:http://dpsm.wo
我正在使用 MediaCode、MediaExtractor 和 AudioTrack 创建我自己的媒体播放器实现。我需要对从本地存储的音频文件中读取的解码 mp3 样本执行失真 - 因此需要自定义实
我正在尝试使用 ExoPlayer 播放 AAC 流。我遇到了与使用内置 MediaPlayer 时遇到的相同问题:在 KitCat 上启动需要 15 - 20 秒(其他版本可能也会发生同样的情况,但
我在两台 Android 设备上检查了 MediaExtractor 的输出,它似乎在它们上产生了略有不同的样本,假设相同视频文件。 对于一个设备,非 VCL NAL 单元连接到下一个 VCL 单元以
我正在使用 MediaExtractor/MediaCodec 解码视频并将其渲染到 TextureView。作为模板,我使用了以下代码:https://github.com/vecio/MediaC
我正在尝试流式传输传入的 AMR_NB。我不能直接使用 MediaPlayer,因为它需要一个可搜索的文件。我想使用 MediaCodec,但要使用 MediaCodec,我需要(我想……请纠正我!)
我正在像这样使用 Android MediaExtractor: MediaExtractor extractor = new MediaExtractor(); extractor.setDataS
我需要将视频解码为一系列位图,以便我能够修改它们,然后将它们压缩回 android 中的视频文件。 我计划通过使用 getFrameAtTime 并将其保存到图像序列中来管理它。然后我可以修改序列中的
我尝试读取 raw/assets 文件夹中的视频文件,我尝试了以下方法,但均无效。我正在测试 API 16。每种方法,我都尝试使用和不使用 mp4 扩展。我真的很感激有人可以帮助我 所有方法都不会崩溃
我正在尝试使用 MediaCodec 播放视频。视频正在播放但音频静音。我想取消静音。经过研究我发现我们需要单独解码音频和视频。我想只使用一个 Mediacodec 和 MediaExtractor
我是一名优秀的程序员,十分优秀!