간단한 네트워크 플레이어를 구축하는 세 가지 방법을 알려줍니다.

1. 소개

   视频类、直播类APP最近几年一直都比较火爆,占据下载排行榜的前列。华为视频服务提供视频播放服务,助力开发者快速构建视频特性,帮助开发者向用户提供视频媒体体验。
   本文介绍了几种简单实现网络视频播放器的方式,包括使用Android原生的,使用第三方SDK,以及使用华为视频服务三种方式,以及之间的差异。

2- 네트워크 플레이어 실현 계획

비디오 재생을 완료하기위한 몇 가지 옵션이 있습니다.

  1. VideoView, Android는 개발자가 캡슐화 한 비디오 미디어를 재생하는 간단한 방법을 제공하고 몇 가지 기본 방법 (타임 라인, 진행률 표시 줄 등)을 제공합니다.

  2. SurfaceView + MediaPlayer, SurfaceView는 디스플레이에 사용되며 MediaPlayer는 미디어 파일 재생 구성 요소에 사용됩니다.

  3. 전문 비디오 회사는 일반적으로 비디오 웹 사이트 및 라이브 방송 관련 작업을 완료하기 위해 자체 스트리밍 미디어 라이브러리를 사용자 정의합니다. 예를 들어 Ijkplayer는 Bilibili에서 출시 한 FFplay를 기반으로하는 경량 Android / iOS 비디오 플레이어입니다. 크로스 플랫폼 기능이 실현되고 API는 통합하기 쉽습니다. 컴파일러 구성을 잘라서 설치 패키지 크기를 쉽게 제어 할 수 있습니다. 하드웨어 가속 디코딩 지원, 더 많은 전력 절약, Android 플랫폼에서 애플리케이션 공격 통합 솔루션을 제공합니다.

Huawei 비디오 서비스가이 범주에 속합니다.

  1. 개발자는 개인 또는 팀 개발자가 제공하는 오픈 소스 SDK를 사용하여 3 ~ 2 줄의 코드를 애플리케이션의 비디오 재생 프레임 워크에 통합하고 다양한 개발자의 다양한 요구를 충족하는 개방형 인터페이스를 제공 할 수 있습니다.

그중 1, 2는 Android의 기본 구성 요소로, 단순한 mp4, 3gp 형식 만 재생할 수 있지만 flv, rmvb 및 기타 형식은 재생할 수 없습니다. 따라서 더 많은 개발자가 더 많은 비디오 형식과 재생 기능을 지원하기 위해 오픈 소스 SDK를 선택합니다.

3- 전체 과정

로드에서 재생 준비에 이르기까지 비디오 스트림은 동의하지 않고 패키지를 해제하고 인코딩을 해제해야합니다. 다음 그림은 전체 비디오 재생 프로세스와 관련된 단계를 보여줍니다.

여기에 사진 설명 삽입

프로토콜은 스트리밍 미디어 프로토콜입니다. 일반적으로 http, RTSP, RTMP, http 프로토콜이 일반적으로 사용되며 RTSP 및 RTMP는 일반적으로 라이브 스트리밍 또는 원격 비디오 감시와 같은 제어 신호 지원에 사용됩니다.

비디오 캡슐화 프로토콜은 mp4, avi, rmvb, mkv, ts, 3gp, flv 등과 같은 일반적인 접미사 형식을 나타냅니다. 이들은 스트리밍 미디어 캡슐화 프로토콜로 전송 중에 오디오와 비디오를 함께 압축하므로 재생하기 전에 풀어야합니다. 해당 오디오 코딩 및 비디오 코딩을 추출하고,

Ø 오디오 코딩 :

오디오 데이터의 인코딩 방법, 일반 mp3, pcm, wav, aac, ac-3 등, 원본 오디오 데이터 크기는 일반적으로 직접 입력에 적합하지 않기 때문에 원본 크기는 일반적으로 다음과 같습니다.

샘플링 속도 (Sampling Rate) 채널 (s) 채널 수 샘플 형식 * 계산할 기간 (오디오 샘플링 속도가 48kHz이고 샘플 형식이 16 비트, 모노, 24 초, 원래 오디오 크기라고 가정)

48,000 16 1 * 24/8 = 2.3MB

추출 된 오디오 정보의 실제 크기는 아래 그림과 같이 약 353K로 오디오 코딩의 역할입니다.

여기에 사진 설명 삽입

Ø 비디오 코딩 :
비디오 코딩은 일반적으로 H263, H264, HEVC (H265), MPEG-2, MPEG-4 등 영상 이미지의 코딩 및 압축 방법을 의미하며, 그중 H264는 현재 비교적 일반적인 코딩 방법입니다. 비디오 코딩의 원리는 더 복잡합니다. 여기서는 따로 논의하지 않겠습니다. 목적은 동일합니다. 비디오 코딩은 주로 비디오 정보의 압축을위한 것입니다.

지식 포인트 : 하드 디코딩과 소프트 디코딩
일부 플레이어에서는 하드 디코딩과 소프트 디코딩의 두 가지 재생 모드가 있음을 알 수 있습니다. 두 가지 차이점은 무엇입니까?

휴대폰에는 CPU, GPU 또는 디코더와 같은 하드웨어가 있습니다. 일반적으로 계산은 소프트웨어의 실행 칩인 CPU에서 수행되며 GPU는 주로 그림 표시 (일종의 하드웨어 가속)를 담당합니다.

소위 소프트 디코딩은 CPU의 컴퓨팅 성능을 사용하여 디코딩하는 것을 말하며 일반적으로 CPU의 성능이 그다지 강하지 않으면 디코딩 속도가 느려지고 전화기가 과열 될 수 있습니다. 그러나 통합 알고리즘을 사용하기 때문에 호환성이 매우 좋습니다.

하드 디코딩은 디코딩을 가속화하기 위해 휴대폰에서 전용 디코딩 칩을 사용하는 것을 의미합니다. 일반적으로 하드 디코딩의 디코딩 속도는 훨씬 빠르지 만 다양한 제조사에서 하드 디코딩을 구현하기 때문에 품질이 고르지 않고 호환성 문제가 발생하기 쉽습니다.

4- 주요 단계 설명 및 코드 통합

4.1-Android 네이티브 방식

여기에서 VideoView를 예로 들어 보면 VidoView 자체는 실제로 SurfaceView와 MediaPlayer를 포함합니다.

1 단계 : 레이아웃에 VideoView 추가


<LinearLayout  

android:layout_width="match_parent"  

android:layout_height="200dp">  

<VideoView  

android:id="@+id/videoView"  

android:layout_width="wrap_content"  

android:layout_height="wrap_content">  

</VideoView>  

</LinearLayout>  

2 단계 : 재생 소스 및 컨트롤러 설정

//网络视频    

String netVideoUrl = "http://baobab.kaiyanapp.com/api/v1/playUrl?vid=221119&resourceType=video&editionType=default&source=aliyun&playUrlType=url_oss&udid=1111";    

//指定视频文件的路径    

videoView.setVideoURI(Uri.parse(videoUrl1));    

//设置视频控制器    

videoView.setMediaController(new MediaController(this));    

//播放完成回调    

videoView.setOnCompletionListener( new MyPlayerOnCompletionListener()); 

3 단계 : 재생, 일시 중지 및 기타 버튼을 추가하여 재생 제어

switch (v.getId()){    

case R.id.play:    

if(!videoView.isPlaying()){ //开始播放    

Log.d(TAG, "onClick: play video");    

videoView.start();    

}    

break;    

case R.id.pause:    

Log.d(TAG, "onClick: pause video");    

if(videoView.isPlaying()){//暂停    

videoView.pause();    

}    

break;    

case R.id.replay:    

Log.d(TAG, "onClick: repaly video");    

if(videoView.isPlaying()){    

videoView.resume();//重新播放    

}    

break;   

4 단계 : onDestroy를 추가하여 리소스 해제

public void onDestroy(){//释放资源  

super.onDestroy();  

if(videoView!=null){  

videoView.suspend();  

}  

}  

비디오 재생 효과 :

여기에 사진 설명 삽입

4.2- 타사 오픈 소스 SDK 통합

다음은 오픈 소스 JZVideo의 예입니다. github 주소 : https://github.com/Jzvd/JZVideo

여기에서 ListView 메서드는 여러 비디오 재생 소스의 목록 스타일 재생을 구현하는 데 사용됩니다.

1 단계 : 앱에서 build.gradle의 종속성 패키지에 추가

구현 'cn.jzvd : jiaozivideoplayer : 7.5.0'

2 단계 : 레이아웃에서 cn.jzvd.JzvdStd 사용

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

android:orientation="vertical"  

android:layout_width="match_parent"  

android:layout_height="wrap_content">  

<cn.jzvd.JzvdStd  

android:id="@+id/item_jz_video"  

android:layout_width="match_parent"  

android:layout_height="200dp"/>  

</RelativeLayout>  

</LinearLayout>  

3 단계 : 코드에서 재생 주소 및 재생 소스 설정


class ViewHolder{  

JzvdStd jzvdStd;  

public ViewHolder(View view){  

jzvdStd = view.findViewById(R.id.item_jz_video);  

}  

}      

jzvdStd = view.findViewById(R.id.item_jz_video);  

//设置视频播放源,第1个参数是视频url,第2个参数是title,  

viewHolder.jzvdStd.setUp(  

videoUrls[position],  

videoTitles[position], Jzvd.SCREEN_NORMAL);  

//设置视频的缩略图  

Glide.with(convertView.getContext())  
     .load(videoposters[position])  
     .into(viewHolder.jzvdStd.posterImageView);  

//记录播放的位置  

viewHolder.jzvdStd.positionInList = position;  

//增加释放视频资源onStop方法  

@Override  

protected void onStop() {  

super.onStop();  

JzvdStd.releaseAllVideos();  

}  

비디오 재생 효과 :

여기에 사진 설명 삽입

JzvdStd의 기능 : ListView가 스크롤 된 후 비디오 재생이 중지되고 비디오가 최대화되고 자동 버퍼링, 배경 순수 오디오 재생, 썸네일 설정 가능, 비디오 제목 설정 가능, 비디오 자동 조정 밝기 및 사운드.

4.3- Huawei 비디오 서비스를 통합하는 방법

레이아웃은 SurfaceView 및 TextureView를 사용하며 Huawei Video Service SDK를 통합합니다. SDK는 다음에 따라 다릅니다.

구현 "com.huawei.hms : videokit-player : 1.0.1.300"

기본 재생 과정

여기에 사진 설명 삽입

1 단계 : 플레이어 초기화

비디오 서비스 프로세스를 먼저 풀업합니다. 별도의 프로세스에서 실행됩니다. 프로세스가 풀업 된 후 콜백이 있습니다. 성공하면 onSuccess 콜백이 발생하여 SDK 인스턴스를 생성합니다.

응용 프로그램이 시작될 때 초기화를 한 번만 호출하십시오.

/** 

*Inittheplayer 

*/  

privatevoidinitPlayer(){  

//DeviceIdtestisusedinthedemo,specificaccesstoincomingdeviceIdafterencryption  
  WisePlayerFactoryOptionsfactoryOptions=newWisePlayerFactoryOptions.Builder().setDeviceId("xxx").build();  

WisePlayerFactory.initFactory(this,factoryOptions,initFactoryCallback);  

  }  
/** 

*Playerinitializationcallback 

*/  

privatestaticInitFactoryCallbackinitFactoryCallback=newInitFactoryCallback(){  

@Override  

publicvoidonSuccess(WisePlayerFactorywisePlayerFactory){  

LogUtil.i(TAG,"initplayerfactorysuccess");  

setWisePlayerFactory(wisePlayerFactory);  

  }  

 };  

소스를 전환 할 때마다 Step2-Step8을 다시 수행해야합니다.

2 단계 : 재생 인스턴스 만들기,

Private void initPlayer(){  

if(VideoKitPlayApplication.getWisePlayerFactory()==null){  

return;  

  }  

wisePlayer=VideoKitPlayApplication.getWisePlayerFactory().createWisePlayer();  

}  

3 단계 : 리스너 설정

인스턴스를 만든 후 리스너를 SDK에 추가하고

주요 청취자는

1- 오류 모니터링 요청 네트워크 오류, 디코딩 오류, 모니터링은 앱에 메시지를 던집니다.

2- 및 메시지 모니터링 : 재생 중 네트워크 속도가 너무 낮 으면 메시지 알림이 표시됩니다.

3-Onnet 모니터링 : 데이터 다운로드 후 콜백, 현재 데이터 다운로드 완료 알림, 재생 시간,

4- 해상도 업데이트 모니터, 재생 콘텐츠 해상도 변경, 알림이 있습니다

privatevoidsetPlayListener(){  

if(wisePlayer!=null){  

wisePlayer.setErrorListener(onWisePlayerListener);  

wisePlayer.setEventListener(onWisePlayerListener);  

wisePlayer.setResolutionUpdatedListener(onWisePlayerListener);  

wisePlayer.setReadyListener(onWisePlayerListener);  

wisePlayer.setLoadingListener(onWisePlayerListener);  

wisePlayer.setPlayEndListener(onWisePlayerListener);  

wisePlayer.setSeekEndListener(onWisePlayerListener);  

}  
 }  

4 단계 : 재생 소스 설정

//设置单个播放地址  

wisePlayer.setPlayUrl("http://baobab.kaiyanapp.com/api/v1/playUrl?vid=221119&resourceType=video&editionType=default&source=aliyun&playUrlType=url_oss&udid=1111");  

5 단계 : 비디오 재생 창 설정

publicvoidsetSurfaceView(SurfaceViewsurfaceView){  

if(wisePlayer!=null){  

wisePlayer.setView(surfaceView);  

 }  

}   

6 단계 : 데이터 버퍼링 요청

wisePlayer.ready();//开始请求数据

비디오 재생 효과 :

여기에 사진 설명 삽입

5- 기타

5.1-Android 네이티브, 타사 SDK, HMS 비디오 SDK 비교

여기에 사진 설명 삽입

이에 비해 현재 Huawei 비디오 서비스는 Android의 기본 VideoView 및 Surface + MediaPlayer보다 더 강력한 기능을 제공하지만 오픈 소스 SDK에 비해 재생 기능 및 지원되는 비디오 인코딩이 향상되었습니다. 대부분의 기능도 향후 제공됩니다. 계획, 재생 기능 향상 외에도 Huawei Video Services는 비디오 편집, 라이브 녹화, 비디오 배포, 비디오 호스팅, 비디오 검토, 비디오 암호화를 포함하여 장편 및 짧은 비디오 및 라이브 방송을위한 종단 간 솔루션을 제공합니다. 이러한 기능은 CP가 신속한 미디어 APP 통합 및 출시를 달성하는 데 도움이 될 것이며 향후 기능 발전을 기반으로 Huawei 비디오 서비스를 권장합니다.

약어 목록 :

여기에 사진 설명 삽입


원본 링크 :https://developer.huawei.com/consumer/cn/forum/topic/0202440181902250357?fid=18

저자 : Pepper

추천

출처blog.51cto.com/14772288/2606496