美文网首页
音视频技术(3)- 入门DEMO

音视频技术(3)- 入门DEMO

作者: 天叔 | 来源:发表于2019-11-23 16:15 被阅读0次

    参考雷雷霄骅的博客

    https://blog.csdn.net/leixiaohua1020/article/details/47071547
    断断续续花了一周的业余时间,完成了4个iOS端 ffmpeg demo的实现

    1. 做个简单的入口


      image
    2. 接入ffmpeg编译好的库和头文件,打印configuration


      image
    3. 推流的实现
      推流的实现,需要先搭建一个nginx + rtmp服务器,也不复杂,网上有很多详细的教程
      推流后,本地可以用ffplay来查看推流的视频,也可以写个简单的h5页面查看

      推流最末尾会报错,错误如下,google/baidu 找遍了所有的帖子,没找到原因

      // av_write_trailer(ofmt_ctx); 只能确定是这句代码有问题,应该是写流结尾出bug了, 可能是采用了老接口的问题
      Error muxing packet
      [flv @ 0x12102c000] Failed to update header with correct duration.
      [flv @ 0x12102c000] Failed to update header with correct filesize.
      Error occurred.
      

    也可以直接用ffmpeg命令推流

    ffmpeg -re -i "/home/users/test.mp4" -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://xxxxx:1935/hls/test2
    
    // 直接用ffplay接受流媒体数据
    // ffplay -i rtmp://180.76.164.113:1935/hls/test2
    
    // h5实现代码, 引用了hls库:
     <!DOCTYPE html>
    <html>
    <head>
        <title>rtmp</title>
        <meta charset="utf-8">
        <script src="https://cdn.jsdelivr.net/hls.js/latest/hls.min.js"></script>
    </head>
    <body>
        非的发达
        <video 
        autoplay="true"
        muted="muted"
        id="video"></video>
        <script>
            if (Hls.isSupported()) {
                var video = document.getElementById('video');
                var hls = new Hls();
                hls.loadSource('http://xxxxx/hls/test2.m3u8');
                hls.attachMedia(video);
                hls.on(Hls.Events.MANIFEST_PARSED, function(){
                    video.play();
                })
            }  
        </script>
    </body>
    </html>
    
    1. iOS原生播放器的实现


      image.png

      iOS对音视频的支持非常好,写个播放的demo,总共不到80行代码

    #import "PlayViewController.h"
    #import <MediaPlayer/MediaPlayer.h>
    @interface PlayViewController ()
    @property MPMoviePlayerController *moviePlayer;
    @end
    
    @implementation PlayViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        [self.moviePlayer play];
    }
    
    -(void)dealloc{
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    
    -(MPMoviePlayerController *)moviePlayer{
        if(!_moviePlayer){
            NSString *urlStr = [[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:@"resource.bundle/war3end.mp4"];
            NSURL *url = [NSURL fileURLWithPath:urlStr];
            _moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
            _moviePlayer.view.frame = self.view.bounds;
            _moviePlayer.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
            [self.view addSubview:_moviePlayer.view];
        }
        return _moviePlayer;
    }
    
    -(void)addNotification{
        NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
        [notificationCenter addObserver:self selector:@selector(mediaPlayerPlaybackStateChange:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:self.moviePlayer];
        [notificationCenter addObserver:self selector:@selector(mediaPlayerPlaybackfinished:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayer];
    }
    
    -(void)mediaPlayerPlaybackStateChange:(NSNotification *)notification{
        switch (self.moviePlayer.playbackState) {
            case MPMoviePlaybackStatePlaying:
                NSLog(@"正在播放...");
                break;
            case MPMoviePlaybackStatePaused:
                NSLog(@"暂停播放");
                break;
            case MPMoviePlaybackStateStopped:
                NSLog(@"停止播放");
                break;
            default:
                break;
        }
    }
    
    -(void)mediaPlayerPlaybackfinished:(NSNotification *)notification{
        NSLog(@"播放完成.%li", self.moviePlayer.playbackState);
    }
    
    @end
    

    相关文章

      网友评论

          本文标题:音视频技术(3)- 入门DEMO

          本文链接:https://www.haomeiwen.com/subject/xhphwctx.html