`
rensanning
  • 浏览: 3548730 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38149
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607315
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682337
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89355
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401856
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69695
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91723
社区版块
存档分类
最新评论

基础知识 - 视频直播

 
阅读更多
移动直播、视频直播、Live Video Streaming有多么火爆,搜搜这几个关键字就知道了。直播的形态也在不断发展中:美女秀场 -> 游戏直播 -> 全民直播。相应的拍摄设备也在变化,PC -> 智能设备 -> VR设备。直播技术并不是什么新技术,google一下就有很多资料可查。

这里列几篇入门参考:

视频直播相当耗流量、对性能延迟等要求也很高,所以很少会自己开发视频直播技术,目前多采用第三方成熟的云直播平台。但应该掌握基本的视频直播技术。

(1)流媒体协议
RTP:Real Time Transport Protocol 实时传输协议
RTSP:Real Time Streaming Protocol 实时流传输协议,传统的监控摄像机多用RTSP
RTMP:Real Time Messaging Protocol 实时消息传送协议,Adobe出品用于Flash Player
MMS:Microsoft Media Server 微软媒体服务器协议,Microsoft出品用于Windows Media Player

基于HTTP的流媒体技术:
HLS:Apple HTTP Live Streaming
HDS:Adobe HTTP Dynamic Streaming
MSS:Microsoft Smooth Streaming
MPEG-DASH:MPEG Dynamic Adaptive Streaming over HTTP

以及一些相对应的变种。


(2)主流方案

移动友好的主流方案:RTMP推流、HLS拉流!

Apple的HLS基于HTTP的流媒体传输协议,在服务器端将媒体分隔为很短时长的小媒体文件(MPEG-TS格式),客户端不断的下载并播放这些小文件,而服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件实现直播。

*** WebRTC 和 WebSocket 目前兼容性都不是很好。

流程
媒体文件/媒体流/摄像头 -> ffmpeg -> rtmp -> nginx server -> HLS -> Client


编解码
FFmpeg https://ffmpeg.org/
HandBrake https://handbrake.fr/
GStreamer https://gstreamer.freedesktop.org/

(3)搭建RTMP服务器(基于CentOS)

1)安装(nginx+nginx-rtmp-module)
# yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel

# cd /usr/local/src
# wget http://nginx.org/download/nginx-1.11.3.tar.gz
# tar -zxvf nginx-1.11.3.tar.gz

# yum install git
# git --version  
# git clone https://github.com/arut/nginx-rtmp-module.git

# cd nginx-1.11.3
# ./configure --prefix=/usr/local/nginx-1.11.3 --with-http_realip_module --with-http_ssl_module --add-module=/usr/local/src/nginx-rtmp-module
# make
# make install

# ln -s /usr/local/nginx-1.11.3 /usr/local/nginx
# cd /usr/local/nginx/sbin/
# ./nginx
# curl http://localhost/


2)配置
# vi /usr/local/nginx/conf/nginx.conf
    # RTMP configuration
    rtmp {
        server {
            # Listen on standard RTMP port
            listen 1935; 
            chunk_size 4000;

            application show {
                live on;
                # Turn on HLS
                hls on;
                hls_path /tmp/hls/;
                hls_fragment 3;
                hls_playlist_length 60;
                # Disable consuming the stream from nginx as rtmp
                deny play all;
            }
        }
    }

    http {

        server {

            location /hls {
                # Disable cache
                add_header 'Cache-Control' 'no-cache';

                # CORS setup
                add_header 'Access-Control-Allow-Origin' '*' always;
                add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
                add_header 'Access-Control-Allow-Headers' 'Range';

                # Allow CORS preflight requests
                if ($request_method = 'OPTIONS') {
                    add_header 'Access-Control-Allow-Origin' '*';
                    add_header 'Access-Control-Allow-Headers' 'Range';
                    add_header 'Access-Control-Max-Age' 1728000;
                    add_header 'Content-Type' 'text/plain charset=UTF-8';
                    add_header 'Content-Length' 0;
                    return 204;
                }

                # Serve HLS fragments
                types {
                    application/dash+xml mpd;
                    application/vnd.apple.mpegurl m3u8;
                    video/mp2t ts;
                }

                root /tmp;
            }
        }
    }

# /usr/local/nginx/sbin/nginx -s reload


3)推流测试OBS https://obsproject.com/
Mode -> Live Stream
FMSURL -> rtmp://localhost:1935/show
Stream Key -> mystream


4)拉流测试VLC media player http://www.videolan.org/
Network URL -> rtmp://localhost:1935/show/mystream


5).m3u8文件确认
# cd /tmp/hls
# ll
    -rw-r--r-- 1 nobody nobody 1093596 Aug 23 13:41 mystream-0.ts
    -rw-r--r-- 1 nobody nobody  465112 Aug 23 13:41 mystream-1.ts
    -rw-r--r-- 1 nobody nobody 1060132 Aug 23 13:41 mystream-2.ts
    -rw-r--r-- 1 nobody nobody     181 Aug 23 13:41 mystream.m3u8
# cat mystream.m3u8
    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-MEDIA-SEQUENCE:0       第一个TS分片的序列号
    #EXT-X-TARGETDURATION:8       每个分片TS的最大的时长
    #EXT-X-DISCONTINUITY
    #EXTINF:8.333,
    mystream-0.ts
    #EXTINF:3.534,
    mystream-1.ts
    #EXTINF:8.033,
    mystream-2.ts


测试结果:


6)ffmpeg https://ffmpeg.org/

安装
# yum -y install epel-release
# rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
# yum -y --enablerepo=epel,nux-dextop install ffmpeg
# ffmpeg -version


推流
file
引用
ffmpeg -re -i mydir/myfile.mkv -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://localhost/show/mystream

webcam
引用
ffmpeg -re -f video4linux2 -i /dev/video0 -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://localhost/show/mystream

stream
引用
ffmpeg -i rtmp://example.com/appname/streamname -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://localhost/show/mystream


测试结果:


7)HLS拉流
基于开源播放器 MediaElement.js 来播放HLS。PC端除了Safari支持直接播放HLS以外,IE、Chrome、Firefox、Opera等浏览器都支持使用基于Flashls插件的播放器。iOS平台、Android平台目前也都支持HLS播放。

player.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Live Streaming</title>
    <script src="./mediaelement-2.22.1/build/jquery.js"></script>
    <script src="./mediaelement-2.22.1/build/mediaelement-and-player.min.js"></script>
    <link rel="stylesheet" href="./mediaelement-2.22.1/build/mediaelementplayer.min.css" />
</head>
<body>
<video width="640" height="360" id="player1">
  <source type="application/x-mpegURL" src="http://192.168.21.175/hls/mystream.m3u8" />
</video>
<span id="player1-mode"></span>
<script>
$(document).ready(function () {
    $('video').mediaelementplayer({
        success: function(media, node, player) {
            $('#' + node.id + '-mode').html('mode: ' + media.pluginType);
        }
    });
});
</script>
</body>
</html>


测试结果:

Android截图:


(4)移动端采集摄像头Camera视频源进行数据推流

RTSP直播(不怎么维护了)
libstreaming https://github.com/fyhertz/libstreaming
秒拍的VitamioBundle(需要授权)
https://github.com/yixia/VitamioBundle
大牛直播的SmarterStreaming
https://github.com/daniulive/SmarterStreaming
B站的ijkplayer
https://github.com/Bilibili/ijkplayer

阿里云ApsaraVideo,腾讯云、金山云、七牛云、乐视云、奥点云等各大云服务平台的直播SDK。这里测试一下金山云Android采集推流SDK(Livestream SDK),从https://github.com/ksvc/KSYStreamer_Android这里下载demo工程,运行即可。

测试结果:
  • 大小: 1.9 MB
  • 大小: 7.6 MB
  • 大小: 7.6 MB
  • 大小: 222 KB
  • 大小: 20.9 KB
  • 大小: 12.5 KB
  • 大小: 54 KB
  • 大小: 37.9 KB
  • 大小: 184.6 KB
分享到:
评论

相关推荐

    PHP实例开发源码-思乐直播短视频平台源码.zip

    在源码中,我们可以学习到PHP如何处理HTTP请求,动态生成网页内容,以及与数据库交互等基础知识。 2. **框架和库**:为了构建这样一个复杂的平台,开发者可能使用了PHP框架,如Laravel、Symfony或Yii,这些框架提供...

    基于websocket协议的简易视频直播

    1. WebSocket基础知识:WebSocket协议是HTML5的一部分,它提供了一种在单个TCP连接上进行全双工通信的机制。它通过握手协议建立连接,并使用ws或wss(加密)作为URL协议标识。 2. 握手过程:WebSocket连接的建立...

    swift-映客直播|Demo|iOS-swift

    在Swift编程语言中,开发iOS应用,...以上是基于"swift-映客直播|Demo|iOS-swift"项目的关键知识点,通过学习和分析这个Demo,开发者可以深入理解如何在Swift中实现视频直播功能,并将其应用于自己的iOS应用开发中。

    《短视频与直播运营》教学大纲 短视频与直播运 教学大纲

    掌握短视频内容策划、短视频制作、短视频营销、短视频商业变现、短视频运营实战、直播内容策划、直播技能和直播运营实战等方面的知识和技能,使学生能够快速掌握短视频和直播运营技巧和方法,培养和提升学生的实际...

    视频直播技术基础资料

    这份“视频直播技术基础资料”很可能包含了一系列关于这个领域的关键知识点。 首先,我们要理解视频直播的基本流程。视频直播涉及到的主要步骤包括采集、编码、封装、传输、分发和播放。采集阶段,摄像头等设备捕捉...

    直播软件开发之Java音视频解决方案:音视频基础知识.docx

    直播软件开发之Java音视频解决方案:音视频基础知识 直播软件开发之Java音视频解决方案,需要了解音视频基础知识。从信息论的角度来看,描述信源的数据是信息和数据冗余之和,即:数据=信息+数据冗余。音频信号在...

    创业计划书-网络直播PPT

    内容将涵盖直播技术的基础设施,包括流媒体服务器、CDN(内容分发网络)、视频编码与解码、实时互动技术等,以及如何保证直播质量的稳定性。 4. **产品设计**:详细阐述直播平台的用户体验设计,包括界面布局、功能...

    2020年--直播电商生态研究报告-艾瑞-202006精品报告2020.pdf

    它结合了互联网技术、社交媒体、视频直播等元素,使消费者能够在线上实时观看商品展示,并通过主播的讲解与互动实现购买决策。这种方式缩短了传统电商的购物流程,通过主播的个人魅力和专业选品能力,提升了购买转化...

    快手&磁力引擎-2020快手短视频直播电商营销增长宝典-2020.7-61页精品报告2020.pdf

    不过,根据文件标题:“快手&磁力引擎-2020快手短视频直播电商营销增长宝典-2020.7-61页精品报告2020.pdf”,我可以根据这个标题来进行一些相关知识点的解释和分析。 从标题中可以分析出以下几个重要的IT知识点: ...

    ios-仿写直播-swift语言.zip

    首先,我们来了解一下Swift的基础知识。Swift是由Apple于2014年推出的一种编程语言,用于开发iOS、iPadOS、macOS、watchOS和tvOS的应用程序。它结合了Objective-C的强大功能和C++的现代编程理念,提供了简洁、安全和...

    Android视频直播播放器

    本文将深入探讨"Android视频直播播放器"的相关知识点,包括在线视频流直播、本地文件播放以及自定义界面的实现。 1. **在线视频流直播** 在线视频流直播通常基于RTMP (Real-Time Messaging Protocol)、HLS ...

    20210202-方正证券-腾讯控股-0700.HK-专题之视频号篇:借力东风,青云直上.pdf

    - 视频号一年内迭代33次,分为基础架构搭建、创作者生态培养、商业化能力完善三个阶段。 - 视频号结合私域和公域流量入口,通过社交推荐和机器算法实现个性化内容分发。 视频号产品形态与分发逻辑: - 视频号的产品...

    安卓直播视频播放流媒体IPCameraRTSPDLNA相关-视频录制限制时间.zip

    在这个“安卓直播视频播放流媒体IPCameraRTSPDLNA相关-视频录制限制时间.zip”压缩包中,可能包含了与这些技术相关的代码或文档,虽然未提供详细文件内容,但我们可以深入探讨一下这些主题的相关知识点。 首先,让...

    基于Java的流媒体视频直播服务器设计与实现

    本项目聚焦于“基于Java的流媒体视频直播服务器设计与实现”,这涉及到多个IT领域的知识,包括音视频处理、服务器架构、Java编程以及运维等。 首先,我们要理解流媒体的概念。流媒体是指在互联网上传输的连续多媒体...

    音视频-直播技术-数字音视频压缩技术标准与应用研究.pdf

    在当前的数字化时代,音视频压缩技术已经成为信息技术领域不可或缺的一部分,尤其在直播技术和流媒体服务中扮演着核心角色。本文将深入探讨数字音视频压缩技术的发展、标准制定过程及其在中国的应用,同时关注知识...

    Android-Android视频直播应用且配有弹幕显示内容均从斗鱼抓取。

    在Android平台上开发一款视频直播应用是一项复杂而富有挑战性的任务,尤其当涉及到集成弹幕功能并从第三方平台如斗鱼抓取内容时。这个项目"video-live-master"显然是一个实现此类功能的源代码示例。下面我们将深入...

    音视频-直播技术-英国经验主义声音学说探析.pdf

    总的来说,英国经验主义的声音学说在音视频直播技术中起着基础性的理论支撑作用,它揭示了声音的感知性质、音乐的主观构造和听众体验的重要性。这些哲学思考为音视频直播技术的发展提供了独特的视角,强调了在技术...

    基于QT的网络视频直播软件

    QT是Qt Company开发的一种跨平台应用程序...开发者需要具备扎实的C++基础,熟悉QT框架,以及一定的网络和多媒体处理知识。通过这样的项目实践,不仅可以提升技术能力,也有助于理解网络视频直播背后的原理和技术挑战。

    android 视频直播案例

    在这个“android 视频直播案例”中,我们可能会遇到一系列关键知识点,这些知识点是构建一个完整的视频直播应用的基础。让我们逐一探讨。 1. **Vitamio库**:标签中提到的“vitmio”,是一个开源的多媒体框架,适用...

Global site tag (gtag.js) - Google Analytics