RTSP实时音视频(H264/H265/AAC)开发实战项目

Posted 剑门微雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RTSP实时音视频(H264/H265/AAC)开发实战项目相关的知识,希望对你有一定的参考价值。

一、项目介绍

主要通过c/c++代码实现RTSP实时音视频服务端和客户端程序。

通过该项目我们会学习了解windows/android平台的音频、视频数据的采集以及显示;音频、视频的编码;音频、视频的解码。

项目偏向(RTSP实时音视频)代码实战,适合初级/刚入门音视频技术开发的学生/工程师。

下图为rtsp server端的软件框图。

rtsp服务端框图

下图为rtsp client端的软件框图。

rtsp客户端框图

二、项目课程大纲

1、环境搭建,代码框架介绍

1、windwos环境搭建、代码框架

2、android环境搭建、代码框架

免费观看课程视频链接:

https://edu.csdn.net/learn/38258/606129?spm=1003.2001.3001.4157

https://edu.csdn.net/learn/38258/606679?spm=1003.2001.3001.4157

https://edu.csdn.net/learn/38258/606130?spm=1003.2001.3001.4157

课程博客:

2、windows平台RTSP Server实现

1、directShow采集摄像头数据

课程视频:

https://edu.csdn.net/learn/38258/606131?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/125471494

2、摄像头数据通过OpenGl显示RGB

课程视频:

https://edu.csdn.net/learn/38258/606132?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/125460540

3、摄像头数据进行x264编码

课程视频:

https://edu.csdn.net/learn/38258/606133?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/125358764

4、摄像头数据进行x265编码

课程视频:

https://edu.csdn.net/learn/38258/606134?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/127707562

5、directShow采集音频数据

课程视频:

https://edu.csdn.net/learn/38258/606135?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/125471494

6、音频数据进行AAC编码

课程视频:

https://edu.csdn.net/learn/38258/606136?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/127765173

7、socekt编程介绍

课程视频:

https://edu.csdn.net/learn/38258/606137?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/125248971

8、rtsp服务器实现

rtsp server connect(和rtsp客户端通信信令交互)代码实现

课程视频:

https://edu.csdn.net/learn/38258/606138?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/127772468

rtsp server rtp封包H264/H265/AAC代码实现

课程视频:

https://edu.csdn.net/learn/38258/606139?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/127773028

rtsp server TCP/UDP发送数据包

课程视频:

https://edu.csdn.net/learn/38258/606140?spm=1003.2001.3001.4157

rtsp server MD5摘要认证

课程视频:

https://edu.csdn.net/learn/38258/606141?spm=1003.2001.3001.4157

3、windows平台RTSP Client实现

1、rtsp客户端实现

a、rtsp client connect(和服务器通信信令交互)代码实现

课程视频:

https://edu.csdn.net/learn/38258/606142?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/127772468

b、rtsp client rtp解封装H264/H265/AAC

课程视频:

https://edu.csdn.net/learn/38258/606143?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/127773028

2、ffmpeg视频解码

课程视频:

https://edu.csdn.net/learn/38258/606144?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/127773413

3、OpenGl显示解码后的YUV

课程视频:

https://edu.csdn.net/learn/38258/606145?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/127890805

4、AAC音频解码

课程视频:

https://edu.csdn.net/learn/38258/606146?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/127773460

5、音频PCM播放

课程视频:

https://edu.csdn.net/learn/38258/606147?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/128175759

4、RTSP Server和RTSP Client代码安卓平台编译调试

1、camera2采集摄像头数据

课程视频:

https://edu.csdn.net/learn/38258/606148?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/128574133

2、Opengl显示视频数据

课程视频:

https://edu.csdn.net/learn/38258/606149?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/127890805

3、OpenSL ES 音频采集

课程视频:

https://edu.csdn.net/learn/38258/606150?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/127890756

4、OpenSL ES 音频播放

课程视频:

https://edu.csdn.net/learn/38258/606151?spm=1003.2001.3001.4157

课程博客:

https://blog.csdn.net/u010140427/article/details/127890756

5、window平台c++代码移植到安卓平台

课程视频:

https://edu.csdn.net/learn/38258/606152?spm=1003.2001.3001.4157

6、android平台使用openh264库编码h264视频

课程视频:

https://edu.csdn.net/learn/38258/606154?spm=1003.2001.3001.4157

7、android平台客户端和服务端登录界面

课程视频:

https://edu.csdn.net/learn/38258/606153?spm=1003.2001.3001.4157

vlc-android-sdk - 无法查看 RTSP 实时视频

【中文标题】vlc-android-sdk - 无法查看 RTSP 实时视频【英文标题】:vlc-android-sdk - cannot view RTSP live video 【发布时间】:2016-01-06 12:33:16 【问题描述】:

我一直在开发一个通过 RTSP 显示实时流媒体视频的 Android 应用程序。 假设我有一个运行良好的 RTSP 服务器,它可以传递 h264 数据包,并且要查看我们应该连接到 rtsp://1.2.3.4:5555/stream

的流

所以我尝试使用本机 MediaPlayer\VideoView,但没有运气(视频在播放 2-3 秒后卡住,所以我加载了 mrmaffen 的 vlc-android-sdk(可以找到 here)并使用以下代码:

            ArrayList<String> options = new ArrayList<String>();
            options.add("--no-drop-late-frames");
            options.add("--no-skip-frames");
            options.add("-vvv");
            videoVlc = new LibVLC(options);

            newVideoMediaPlayer = new org.videolan.libvlc.MediaPlayer(videoVlc);
            final IVLCVout vOut = newVideoMediaPlayer.getVLCVout();
            vOut.addCallback(this);
            vOut.setVideoView(videoView); //videoView is a pre-defined view which is part of the layout
            vOut.attachViews();
            newVideoMediaPlayer.setEventListener(this);

            Media videoMedia = new Media (videoVlc, Uri.parse(mVideoPath));
            newVideoMediaPlayer.setMedia(videoMedia);
            newVideoMediaPlayer.play();

问题是我看到一个空白屏幕。

请记住,当我只放置带有音频流的 RTSP 链接时,它可以正常工作。

是否有人熟悉此 sdk 并对此问题有所了解? 提前致谢

【问题讨论】:

你用vlc-android-sdk解决了这个问题吗? 【参考方案1】:

尝试添加此选项:

--rtsp-tcp

【讨论】:

谢谢,成功了!即使是来自 Google Play 的 VLC for Android 也无法播放某些流(因为它没有此选项)。在代码中:options.add("--rtsp-tcp");新的 LibVLC(上下文,选项);【参考方案2】:

我使用以下代码播放 rtsp 流

try 
        Uri rtspUri=Uri.parse("rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov");


        final MediaWrapper mw = new MediaWrapper(rtspUri);
        mw.removeFlags(MediaWrapper.MEDIA_FORCE_AUDIO);
        mw.addFlags(MediaWrapper.MEDIA_VIDEO);

        MediaWrapperListPlayer.getInstance().getMediaList().add(mw);

        VLCInstance.getMainMediaPlayer().setEventListener(this);
    VLCInstance.get().setOnHardwareAccelerationError(this);


    final IVLCVout vlcVout = VLCInstance.getMainMediaPlayer().getVLCVout();
    vlcVout.addCallback(this);
    vlcVout.setVideoView(mSurfaceView);
    vlcVout.attachViews();
    final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
    final String aout = VLCOptions.getAout(pref);
    VLCInstance.getMainMediaPlayer().setAudioOutput(aout);
    MediaWrapperListPlayer.getInstance().playIndex(this, 0);

     catch (Exception e) 
        Log.e(TAG, e.toString());
    

当您获得播放事件时,您需要启用视频轨道。

private void onPlaying() 
    stopLoadingAnimation();
    VLCInstance.getMainMediaPlayer().setVideoTrackEnabled(true);

这可能对你有帮助

【讨论】:

以上是关于RTSP实时音视频(H264/H265/AAC)开发实战项目的主要内容,如果未能解决你的问题,请参考以下文章

视频概念信息像素色彩

FFmpeg linux解包解码rtsp流编码h.264/h.265 mp4视频报错问题排查(没解决)

FFmpeg linux解包解码rtsp流编码h.264/h.265 mp4视频报错问题排查(没解决)

Qt编写视频监控管理平台(支持海康/大华/宇视/华为/天地伟业/H264/H265等)

一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:概览

H5网页播放器EasyPlayer如何实现iOS端H.265视频全屏播放效果?