相关疑难解决方法(0)

使用MediaCodec进行H264流媒体

我目前正在尝试将Android用作Skype端点.在这个阶段,我需要将视频编码为H.264(因为它是Skype支持的唯一格式)并将其封装在RTP中以使流式传输工作.

显然,MediaRecorder出于各种原因,它并不适合这种情况.一个是因为它在完成后添加了MP4或3GP标头.另一个原因是为了将延迟降至最低,硬件加速可能会派上用场.这就是为什么我想利用最近的低级别增列和框架,是MediaCodec,MediaExtractor

目前,我计划如下工作.相机将其视频写入缓冲区.MediaCodec使用H264对视频进行编码,并将结果写入另一个缓冲区.此缓冲区由RTP封装器读取,后者将流数据发送到服务器.这是我的第一个问题:这个计划听起来对你有用吗?

现在我已经陷入第一步了.由于互联网上关于使用相机的所有文档都使用了MediaRecorder,我找不到在编码之前将原始数据存储到缓冲区的方法.是addCallbackBuffer适合呢?任何人都有一个例子的链接?

接下来,我找不到很多关于MediaCodec的文档(因为它相当新).有固定教程的人吗?

最后:关于RTP库的任何建议?

非常感谢提前!

android rtp video-streaming h.264

8
推荐指数
2
解决办法
8971
查看次数

MediaRecorder 和 VideoSource.SURFACE,停止失败:-1007(一个严重的 Android 错误)

我正在尝试MediaRecorder不使用Camera实例而是使用Surface视频源进行录制(是的,这是可能的,但事实证明它并不完美)-mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);

我只写什么问题:

下一个代码仅适用于某些设备,并在最近的设备重新启动后在某些设备上临时工作或根本不起作用

如果它不起作用 okMediaRecorder.stop()方法失败并出现下一个错误

E/MediaRecorder:停止失败:-1007 W/System.err:

java.lang.RuntimeException:停止失败。在

android.media.MediaRecorder.stop(本机方法)

录音机 mp4 文件太小(千字节),无法播放

测试设备:

适用于联想 P2、小米 A1

不适用于小米红米 5、索尼 Xperia、小米红米 4 Prime

您也可以阅读我的代码中的注释以更好地理解问题

new Thread(() -> {

    MediaRecorder mediaRecorder = new MediaRecorder();

    File file = new File(Environment.getExternalStorageDirectory()
            + File.separator + "test_media_recorder_surface_source.mp4");
    if (file.exists()) {
        file.delete();
    }

    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mediaRecorder.setOutputFile(file.getAbsolutePath());
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mediaRecorder.setVideoSize(1280, 720);
    mediaRecorder.setCaptureRate(24);

    try {
        mediaRecorder.prepare();

        int sleepTime = 1000 / 24;

        Surface surface = mediaRecorder.getSurface();

        mediaRecorder.start();

        // record something (we can …
Run Code Online (Sandbox Code Playgroud)

android surface android-canvas mediarecorder android-mediarecorder

8
推荐指数
1
解决办法
3648
查看次数