HLS(HTTP Live Streaming)视频直播技术实战

技术原理

HTTP Live StreamingHLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhoneiPad)提供音视频直播和点播方案,它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些,在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8) playlist文件,用于播放可用的媒体流,参考:https://developer.apple.com/streaming/


实战演练

目标

搭建本地视频直播,比如,电脑上面有很多电影,现在我们想在手机上面看,正常情况要把电影下载到手机上面,iPhone就有些麻烦,Android还好办,现在我们可以开着电脑,然后通过电脑把视频传输过来,手机直接可以直播的形式观看电影,其实这就是所谓的直播技术,只是我们是本地测试,感兴趣或有时间,实战升级版可以把摄像头传输过来,就是真正的在家直播了。


步骤

第一步:准备软件和工具

1,笔记本电脑(MAC电脑)

2,手机(iOS + Android),也可以模拟器测试;

3Xcode Android Studio IDE 开发工具;

4VLC流媒体播放器;

5mediastreamsegmentermac os自带的流媒体分割工具,参考:http://blog.youkuaiyun.com/musou_ldns/article/details/7493346


第二步:配置工具和环境


1,下载VLC并打开,如图配置:

图一,加载本地电影


图二,设置参数


设置完成后open,就可以看到直播已经开始了,注意进度条;


2,打开系统配置,设置共享文件路径Sites下,新建个index.html文件 stream文件夹,在index文件中输入如下代码:


<html>

 <head>

    <meda name="viewport" content="width=320;initial-scale=1.0;maximum-scale=1.0;user-scalable=0;"/>

            </head>

            <body>

              <center><video src="http://127.0.0.1/~mapboo/stream/prog_index.m3u8" controls autoplay></video></center>

            </body>

          </html>


3,打开mediastreamsegmenter切割工具

正常情况在/usr/local/bin/路径下,如果没有,那就到官网重新下载安装即可


继续在终端下输入如下命令:

/usr/local/bin/mediastreamsegmenter -s 3 -D -f /Users/mapboo/Sites/stream/  127.0.0.1:1234

这是切割流媒体为m3u8格式,命令参数请参考之前链接,有详细介绍,大概就是说每默认10秒钟生成一个片段,只保留最新三个,旧的会删除,然后把生成的片段保存到后台文件夹中;





4,网址测试

http://127.0.0.1/~mapboo/stream/prog_index.m3u8


#EXTM3U

#EXT-X-TARGETDURATION:10

#EXT-X-VERSION:3

#EXT-X-MEDIA-SEQUENCE:59

#EXTINF:9.96821,

fileSequence59.ts

#EXTINF:9.96821,

fileSequence60.ts

#EXTINF:9.96821,

fileSequence61.ts


如页面出现这些内容则正常,恭喜,可以下一步了


第三步:代码编写

iOS


- (IBAction)palyHLSM3U8:(id)sender {

  //http://blog.youkuaiyun.com/xiaobo16/article/details/10986271


#if 0  //网页版

    UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];

    NSURL *url = [NSURL URLWithString:@"http://192.168.29.99/~mapboo/stream/prog_index.m3u8"];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    [webView loadRequest:request];

    [self.view addSubview:webView];

#else   //内置播放器

    NSString *url = @"http://192.168.29.99/~mapboo/stream/prog_index.m3u8";

    MPMoviePlayerViewController *playerViewController  = [[MPMoviePlayerViewController alloc]initWithContentURL:[NSURL URLWithString:url]];

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(movieFinishedCallback:)

                                                name:MPMoviePlayerPlaybackDidFinishNotification

                                              object:[playerViewController moviePlayer]];

    [self presentMoviePlayerViewControllerAnimated:playerViewController];

    MPMoviePlayerController *aplayer = [playerViewController moviePlayer];

    [aplayer play];

    

#endif

    

}


效果图:


Android端代码:

//直播源地址
        String url = "http://192.168.29.99/~mapboo/stream/prog_index.m3u8";
        //创建播放器
        mVideoView = (VideoView) findViewById(R.id.video);

//注意这里设置
//        mVideoView.setBackgroundColor(0);
//        mVideoView.getBackground().setAlpha(0);

        Uri uri = Uri.parse(url);
        mVideoView.setVideoURI(uri);

        mVideoView.setMediaController(new MediaController(this));
        mVideoView.requestFocus();

        //播放按钮
        mPlayBtn = (Button) findViewById(R.id.play);
        mPlayBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String title = null;
                if (mVideoView.isPlaying()){
                    mVideoView.pause();
                    title = "播放";
                }else {
                    mVideoView.start();
                    title = "暂停";
                }
                mPlayBtn.setText(title);
                Log.i("TAG",title);
            }
        });

效果图



至此,完整的搭建视频直播就完成了,做直播,其实很简单,照着做一遍吧。

iOS中国开发者QQ群:222793876 ,欢迎加入一起讨论iOS技术。

一款免费的流媒体直播软件,主要用于流媒体直播视频直播,视频点播,视频录制等应用,与FMS、WOWZA、RED5一道,作为用户流媒体直播应用的可选方案。 1、支持Windows/Linux等多种操作系统; 2、采用开发的流媒体协议,而非私有协议,可以与主流系统对接,至少支持RTMP推流,RTMP拉流,RTSP拉流三种方式获取直播流,支持对获取的直播流再按照TS组播或者单播,RTMP,RTSP,HLS,TS OVER HTTP,FLV OVER HTTP等标准流媒体协议的方式进行对外直播转发; 3、支持录制,可定时录制或手动录制,能录制MP4或者FLV格式文件,录制时支持生成新文件或者追加文件两种方式,支持录制超过4G的文件; 4、单台服务器可支持1000个以上并发用户,直播延时小于2秒; 5、支持RTMP转发功能,能够把AMS上的直播流转发给其它AMS服务器或者第三方的RTMP服务器,例如RED5,FMS,WOWZA流媒体服务器; 6、 支持PC/手机/平板电脑等多终端访问,无论是windows,linux,或者andriod以及IOS系统访问收看直播时都无需下载插件,直接观看; 7、响应点播时间控制在100ms以内,支持暂停、拖动等特技操作; 8、支持文件直播,可把硬盘上存在的FLV文件编目后,按设定好的任务和顺序进行直播; 9、内置Web应用系统,无需复杂配置,可直接部署到用户服务器使用,也可以选配更复杂的媒资管理系统,完成类似优酷土豆的应用模式; 10、开放的系统架构,提供二次开发接口,可轻松的融入到用户已有的平台或网站平台中、或在此基础上进行二次开放等 ------------------------------------------------------------------------- 使用说明: 1、关于安装运行:软件解压到硬盘上后,执行AokuMServiceManager,即可完成AMS服务的安装,安装完成后,在Windows系统服务中会出现一个AokuMService服务; 2、关于端口:AMS默认的管理端口是9001,可通过浏览器登陆http://127.0.0.1:9001/main.html进行管理;AMS默认的RTMP端口是1935,默认的rtsp端口是5554,默认的flv over http端口是7000,默认的ts over http端口是8008,默认的hls端口也是9001; 3、关于推流:使用直播你需要有一个支持rtmp推流的编码器,建议用奥酷全接口高清编码器,当然你也可以通过FME进行软编码来实现; 4、关于接收直播:AMS正常启动并发布上直播流后,你可以在网络内的任一电脑上打开http://ip:9001,通过浏览器观看直播,若开启了hls功能,通过iphone或者ipad登陆http://ip:9001即可观看直播。 5、若开启了TS组播,请确认防火墙是否允许组播,另外您网络内的路由器是否支持组播,接收组播是需要用VLC播放器来完成; 6、接收flv over http也是通过VLC播放器或者支持类似协议的播放器来测试。 7、若使用中出现问题,你可以查看logs目录下的rtmpserver.log文件,里面有详细的错误日志描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

群鸿

感谢认可,多谢打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值