ffmpeg实战教程(十一)手把手教你实现直播功能,不依赖第三方SDK

直播,2016最火的技术之一了,更多的关于直播的知识:http://blog.csdn.net/king1425/article/details/72489272 …这篇我们就不依赖任何集成好的SDK,自己搭建服务器,用ffmpeg+nginx实现手机直播功能

先上图:

推流的手机
这里写图片描述

拉流的网页和VL播放器

这里写图片描述

拉流的手机客户端

这里写图片描述

对于nginx服务器的搭建之前有写过:
ffmpeg实战教程(九)windows下ffmpeg命令+nginx + rtmp实现推流,拉流。

这篇也建议看一下:
关于音视频直播技术的总结


下面开始实现手机直播功能
1.首先你要准备一份编译好的ffmpeg+x264库,我们打算软编码推流。
如果你没有编译好的ffmpeg+x264库也没关系,我最后会提供源码,包含了这些。

这里写图片描述

 

其中libnative-lib.so是我打包的采集推流的方法,使用方式如下

2.然后我们在建一个包 com.ws.ffmpegandroidcameralive,在这个包下写一个WSPlayer类。

public  class WSPlayer {
    static {
        System.loadLibrary("avutil-54");
        System.loadLibrary("swresample-1");
        System.loadLibrary("avcodec-56");
        System.loadLibrary("avformat-56");
        System.loadLibrary("swscale-3");
        System.loadLibrary("postproc-53");
        System.loadLibrary("avfilter-5");
        System.loadLibrary("avdevice-56");
        System.loadLibrary("native-lib");
    }

    public static native int initialize(int width,int height,String url);
    public static native int start(byte[] cameraData);
    public static native int stop();
    public static native int close();
}

 

initialize(int width,int height,String url) 是初始化方法,三个参数分别是视频的宽,高,以及,推流的地址。

start(byte[] cameraData);开始推流,参数传入相机的NV21数据。

stop();停止推流。

close();关闭。

3.编写界面
这里写图片描述

点击start开始推流

4.实现具体逻辑

activity中

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
...

 WSPlayer.initialize(mCamera.getParameters().getPreviewSize().width,mCamera.getParameters().getPreviewSize().height,"rtmp://192.168.9.135:1935/wstv/home");
 ...

在onCreate中初始化WSPlayer 其中rtmp://192.168.9.135:1935/wstv/home是我的服务器地址

   final Camera.PreviewCallback mPreviewCallbacx=new Camera.PreviewCallback() {
            @Override
            public void onPreviewFrame(byte[] data, Camera arg1) {

                WSPlayer.start(data);
            }
        };

WSPlayer.start(data) 在相机的预览回调里面开始添加数据进行推流

    @Override
    protected void onPause(){
        super.onPause();
        WSPlayer.stop();
        WSPlayer.close();
        if(mCamera!=null){
            mCamera.release();
            mCamera=null;
        }
    }

在activity的onPause()方法里面关闭推流

详情:demo下载:https://github.com/WangShuo1143368701/FFmpegandroidWSLive

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
FFmpeg是一个开源的音视频框架,可以用来处理和转码各种音视频文件。如果你想要在Linux上进行FFmpeg的开发,可以参考以下步骤和文库资源。 1. 安装FFmpeg:在Linux上安装FFmpeg非常简单。你可以通过包管理器(如apt、yum等)直接安装,也可以从官方网站(http://ffmpeg.org)下载源码编译安装。安装完毕后,你就可以使用FFmpeg库进行开发了。 2. 开发环境配置:你需要配置一个开发环境来使用FFmpeg库进行开发。推荐使用C/C++语言进行开发。你可以选择一个合适的集成开发环境(如Eclipse、Visual Studio Code等),并配置好编译器、链接库等环境。 3. 学习FFmpeg API:FFmpeg提供了丰富的API供开发者使用。你可以通过查阅FFmpeg官方文档(http://ffmpeg.org/doxygen/trunk/),了解如何使用这些API进行开发。文档中有详细的说明、示例代码和API参考手册,帮助你快速上手。 4. 示例代码和教程:除了官方文档外,还有很多第三方的示例代码和教程可以帮助你学习FFmpeg开发。你可以在GitHub、博客等平台上搜索相关资源。一些开发者也会把自己的开发经验整理成教程或分享在论坛中,可以参考他们的经验和代码。 5. 解决常见问题:在开发过程中,可能会遇到一些问题。你可以通过FFmpeg的官方论坛(http://ffmpeg.org/contact.html)或者其他开发者社区寻求帮助。在这些平台上,你可以提问、分享经验、交流技术,从而更好地解决问题和提高开发效率。 总结来说,通过安装FFmpeg、配置开发环境、学习API、参考示例代码和教程,以及积极解决问题,你就可以开始在Linux上进行FFmpeg的开发了。希望以上的回答对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值